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.
Проблема в том, что встроенная в оболочку 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