#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, что-то в этом роде, в любом случае спасибо!