Как я могу распечатать “-n” с 'эхом'?

Измените один файл вручную к правильному времени (использование touch ... TEMPLATE).

Затем измените остальных путем ссылки на тот файл (использование touch -r TEMPLATE TARGET).

7
20.12.2018, 22:59
4 ответа

Если Вы не хотите использовать prinf у Вас есть несколько из опций, по крайней мере, согласно этому ТАК Вопросы и ответы, названные: эхо “-n” не распечатает-n?.

Это, кажется, Ваш наилучший вариант:

$ echo "x-n" | cut -c 2-
-n

Или некоторое изменение:

$ echo -- '-n'|cut -d" " -f2
-n

printf

printf не имеет этой проблемы:

$ printf "%s\n" -n
-n
7
27.01.2020, 20:15
  • 1
    Могли Вы объяснять вторую команду, особенно часть сокращения его :) –  Michael 07.08.2013, 19:05
  • 2
    @Michael - уверенный, она берет вывод от echo -- '-n', который является -- -n. cut затем разделяет вывод на пробелах и берет 2-е поле, следовательно -n. –  slm♦ 07.08.2013, 19:06

Почему Вы хотели бы использовать echo? Использовать printf:

printf -- '-n\n'

Или:

printf '%s\n' -n

С echo:

echo -n

Произведет -n<LF> в совместимом UNIX echo.

bash, dash, GNU или zsh эхо (в их конфигурациях по умолчанию) может сделать это с:

echo -en '-n\n'

Или (в основанных на ASCII системах):

echo -e '\055n'

Zsh echo может сделать это с:

echo - -n

bash (но нет zsh):

echo -n -; echo n

Интересно, невозможно произвести -n с echo один в POSIX путь (то есть, более или менее, портативно через Нельды и Unix - любит), начиная с поведения, если первый аргумент -n или если какой-либо аргумент содержит символы обратной косой черты, является неуказанным.

7
27.01.2020, 20:15
  • 1
    Если у Вас есть unicode терминал, Вы могли бы произвести \u2011 (или \u2010), которые выглядят идентичными-. Но это - едва решение (и нет никакого портативного способа представить unicode символы, не зная кодирование эмулятора терминала). –  rici 08.08.2013, 08:48
  • 2
    я использую ksh,-e "\x2d" эха, печатает "\x2d", но восьмеричное выражение отзывается эхом,-e "\055" печатает корректное "-". Какие-либо мысли? Спасибо –  Forever Learner 02.05.2017, 17:41
  • 3
    @CppLearner, да echo не является портативным. Не использовать echo. Для совместимого Unix echo echo '\055' произвел бы 0x2d байт (- в ASCII, но системах Unix не требуются, чтобы использовать ASCII в качестве их основных наборов символов, некоторые все еще используют EBCDIC). Но поведение для echo '\x2d' является неуказанным. Так же printf '\055' POSIX и портативный, printf '\x2d' ни один. Огромное спасибо Stéphane Chazelas –  Stéphane Chazelas 02.05.2017, 17:54
  • 4
    для разъяснения и быстрого благоприятного поворота. –  Forever Learner 02.05.2017, 17:55

По историческим причинам, echo не делает обычного вида парсинга аргумента, где любой аргумент, который запускается с - опция за исключением того, что -- сигнализирует о конце опции. echo управляйте главным образом печатает ее неизменные аргументы, но в зависимости от варианта Unix, на оболочке и о том, как оболочка настроена, она может интерпретировать некоторые опции (-e, -E, -n, -) и может рассматривать backslash+character особенно.

Нет никакого портативного способа распечатать -n с echo один. Портативный способ распечатать строку, не имея необходимость волноваться о специальных символах

printf %s -n

или в более общем плане print %s "$somestring". Если Вы хотите распечатать заключительную новую строку после строки, сделайте это printf '%s\n' -n.

2
27.01.2020, 20:15

Попробуйте это при необходимости в "-n" как в первых двух символы:

echo -e '\r-n'

Другой путь:

echo -n '-'; echo 'n'
0
27.01.2020, 20:15
  • 1
    Это печатает дополнительный CR вначале. –  Gilles 'SO- stop being evil' 08.08.2013, 02:22
  • 2
    Какой термин Вы используете? –  stackexchanger 08.08.2013, 02:40
  • 3
    Какой, что? Shell? Любая оболочка, которая реализует -e распечатает 4 байта: 0d 2d 6e 0a (выписанный в шестнадцатеричном числе). Любая оболочка, которая не реализует -e распечатает также 2d 65 20 5c 72 2d 6e 0a или 2d 65 20 0d 2d 6e 0a. –  Gilles 'SO- stop being evil' 08.08.2013, 02:45
  • 4
    Или Вы имели в виду какой терминал? Это не важно. CR не может быть очевидным если echo пишет в терминал, но это находится там в выводе echo. –  Gilles 'SO- stop being evil' 08.08.2013, 02:46
  • 5
    Да, термин, терминал средств. Корреспондент просто хочет распечатать, попробовать мой вариант ударом + Linux. Может быть MacOs, делают это неправильно. –  stackexchanger 08.08.2013, 02:53

Теги

Похожие вопросы