Я пытаюсь написать функцию, которая возвращает строку, которая состоит из двух частей:
- переключатель
- имя файла с пробелами.
Моя проблема: Как указать, чтобы передать результат в другую программу?
#!/bin/bash
getOption() {
echo "-C $1"
}
# prints first lines of man page of cp (copy)
man $(getOption "$1") cp | head -10
В этом примере я пытаюсь передать настроенный файл конфигурации man
. Предполагая, что приведенный выше фрагмент называется run.sh
, настроенная конфигурация называется my man.conf
и оба находятся в одном каталоге, и я получаю эту ошибку:
$ ./run.sh "my man.conf"
my: No such file or directory
Warning: cannot open configuration file my
# output from man for man…
Как указал Гленн Джекман : я упустил пункт из документов Баша
Корень проблемы, описанной выше, заключается в том, что вам нужен способ сохранить каждый аргумент как отдельное слово, даже если этот аргумент содержит пробелы. Кавычки не сделают это, но массив будет.
Таким образом, пробелы сохраняются при обновлении до
#!/bin/bash
args=("")
addOption() {
args+=(-C "$1")
return 0
}
$(addOption "$1")
man "${args[@]}" cp | head -10