Печать » n» в файл с помощью bash

#bash #escaping #special-characters

#bash #экранирование #специальные символы

Вопрос:

Я хочу напечатать эту строку:

 .asciz "%dn"
 

в файл.
Когда я пытаюсь сейчас, он говорит:

 .asciz "0n"
 

похоже, что он интерпретирует %d как 0.

Теперь я пишу echo ".asciz """%d\n"""

Комментарии:

1. Не удается воспроизвести, хотя строка, которую вы показываете, не соответствует кавычкам " . Тем не менее, более простое echo ".asciz "%dn"" должно работать нормально (хотя решение в одинарных кавычках, данное Русланом Османовым, лучше).

2. Единственное, что будет интерпретироваться %d как 0 printf , если соответствующий аргумент отсутствует.

Ответ №1:

В современных системах GNU / Linux строка, заключенная в одинарные кавычки, ничего не интерпретируется, и вы можете просто запустить следующее:

 echo '.asciz "%dn"' > file
 

Однако одинарные кавычки внутри должны быть экранированы:

 echo '13''''
# outputs 13'
 

Но есть исключения. Например, если вы помещаете echo '1n2' в some-script.sh file и вызываете его с измененной BASHOPTS переменной среды, команда может n заменить символ новой строки:

 $ env BASHOPTS=xpg_echo bash some-script.sh
1
2
 

Так что, строго говоря, echo небезопасно. Кроме того, вы можете вызвать printf :

 printf '%s' '.asciz "%dn"'
 

Или встроенная версия:

 builtin printf '%s' '.asciz "%dn"'
 

(см. info bash printf ).

Комментарии:

1. я пробовал это, это возвращает мне новую строку в файле

2. Я новичок в написании сценариев, поэтому я не ожидал ничего продвинутого. Я записал нужный текст в файл, а затем вместо этого выполнил echo, echo file1 >> file2, что-то в этом роде, в любом случае спасибо!