В чем разница между here document и here string в их целях?

Для конкретного случая пробелов и одинарных кавычек должно быть достаточно заключить строку в двойные кавычки:

$ find -name 'Aujour*' -printf "%f\n" | awk '{system("ls -l \""$0"\"")}'
-rw-rw-r-- 1 user user 0 May 26 11:27 Aujourd'hui C'est Toi (Orchestral).flac

В качестве альтернативы, если ваша оболочка предоставляет спецификатор формата кавычек оболочки -, вы можете использовать его вместо findвнутреннего-printf:

$ find -name 'Aujour*' -exec printf '%q\n' {} \; | awk '{system("ls -l "$0)}'
-rw-rw-r-- 1 user user 0 May 26 11:27./Aujourd'hui C'est Toi (Orchestral).flac

Из help printfв bash, например:

%q  quote the argument in a way that can be reused as shell input
6
18.11.2018, 15:32
1 ответ

Здесь string для более коротких строк, здесь document для более длинных. Дополнительная особенность здесь документов заключается в том, что вы можете передавать произвольный текст, не беспокоясь о цитировании. Просто -укажите разделитель в кавычках и убедитесь, что он не отображается в тексте. Вы можете использовать случайную строку (, составленную из символов и цифр ), метод, который также используется для разграничения частей в электронной почте, закодированной MIME.

8
27.01.2020, 20:27

Теги

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