С немного экспериментов, он выглядит как --quoting-style=escape
совместим с заворачивают в $'...'
, с два исключения:
- он избегает пробелов, добавив обратную косую черту; но
$'...'
не выбрасывает обратные косы перед пробелами.
- он не избегает одиночных кавычек.
Таким образом, вы могли бы, возможно, написать что-то вроде этого (в Bash):
function ls-quote-shell() {
ls -Q --quoting-style=escape "[email protected]" \
| while IFS= read -r filename ; do
filename="${filename//'\ '/ }" # unescape spaces
filename="${filename//"'"/\'}" # escape single-quotes
printf "$'%s'\n" "$filename"
done
}
Чтобы проверить это, я создал каталог с кучей имен файлов с фантастическими персонажами; и
eval ls -l $(ls-quote-shell)
работал должным образом. , , хотя я не буду твердить об этом.
В качестве альтернативы, вот версия, которая использует printf
для обработки побегов с последующим printf %q
повторно бежать в раковине-дружески:
function ls-quote-shell() {
ls -Q --quoting-style=escape "[email protected]" \
| while IFS= read -r escaped_filename ; do
escaped_filename="${escaped_filename//'\ '/ }" # unescape spaces
escaped_filename="${escaped_filename//'%'/%%}" # escape percent signs
# note: need to save in variable, rather than using command
# substitution, because command substitution strips trailing newlines:
printf -v filename "$escaped_filename"
printf '%q\n' "$filename"
done
}
но если выясняется, что есть какая-то случается, что первая версия не обрабатывается правильно, то вторая версия, скорее всего, будет иметь одинаковую проблему. (FWIW, eval ls -l $(ls-quote-shell)
работал по назначению с обеими версиями.)
'--quoting-style =" escape "' или '--quoting-style =" c "' должен работать ... –
@ l'L'l: Это не так. 'eval ls $ (ls -Q --quoting-style = escape)' yields 'ls: невозможно получить доступ к anb: нет такого файла или каталога', поэтому он не работает в оба конца. Это не работает без 'eval'. – choroba
'c', скорее всего, будет вашим лучшим выбором ... также в любое время, когда вы eval ls, а затем ls в суб-оболочке, он получит странные результаты. –