Единственные варианты расширения команд bash:
- без кавычек
$(..)
чьи выходные данные всегда анализируются с разбивкой на немые строки - процитировал
"$(..)"
чей вывод всегда передается как единица?
Я пытаюсь повторить в bash функцию рыбной раковины, которую я создал для использования в Mac OS. Моя функция selection
рыбы https://superuser.com/a/1165855 берет выборку в переднем окне и выводит пути для использования в подстановке команд, такие как ls -l (selection)
. Я надеялся добиться того же в bash, возможно, как ls -l $(selection)
.
Я подумал, что это вопрос кавычек, и поэтому попытался передать пути, разделенные переводом строки, в printf "%q "
bash" bash. Однако я обнаружил, что независимо от того, в какую цитату я поместил вывод подстановки команд, он разделялся на пустые места.
Упрощенный пример:
$ touch file\ a file\ b
$ ls $( echo "file\ a file\ b" ) # want expansion equiv to: ls 'file a' 'file b'
ls: a: No such file or directory
ls: b: No such file or directory
ls: file\: No such file or directory
ls: file\: No such file or directory
Это был бы не конец света, если бы мне пришлось использовать подстановку команд в кавычках, например, ls -l "$(selection)"
но при этом вывод команды никогда не разделялся, не обращая внимания на мое тщательное цитирование. Старый синтаксис backtick отличается?
Забавно, Баш, у тебя много возможностей. Неужели никто не разрешил использовать cmda $(cmdb-that-generates-parameters-for-cmda)
? Или пользователь bash просто избегает пробелов или символов в именах файлов (например, животных), чтобы все было легко? Спасибо за любые ответы.