Сценарий оболочки пропускает escape-символ при возврате полезных данных ответа для вызова CURL

GNU ls, по крайней мере, также может сказать вам, как что-то цитировать. В более поздних версиях он включен по умолчанию, но даже если вернуться назад, вы можете сделать что-то вроде:

$ ls --quoting-style=shell
"'A long filename.mp4'"

Также доступны другие стили цитирования; см. справочную страницу ls.

Сprintf(тоже можно что-то сделать хотя бы в bash):

$ printf '%q\n' *
\'A\ long\ filename.mp4\'

%qозначает вывод аргумента из кавычек (, за которым следует \n, символ новой строки )и *соответствует всем именам файлов. Итак, это сортировка -из -ls с использованием printf.

После этого вам просто нужно выяснить, как добавить в свой *. Его не нужно заключать в кавычки, поэтому в двух стилях это будет:

"'A long file"*    # we've just cut a ""-quoted string short.
\'A\ long\ file*   # that's just escapes, so cut it short.
0
08.02.2021, 02:40
1 ответ

Проблема в том, что встроенная в оболочку readинтерпретирует \как escape-символ (, хотя поскольку \uне имеет специального значения, он становится буквальнымu):

$ printf '%s\n' 'extension\u003dvalue' | { read body; echo "$body"; }
extensionu003dvalue

Вы можете отключить обработку обратной косой черты, используя опцию -r:

$ printf '%s\n' 'extension\u003dvalue' | { read -r body; echo "$body"; }
extension\u003dvalue
1
18.03.2021, 22:32

Теги

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