(в Bash) Можно заменить на массив значений:
find2() {
ARGS="/usr/bin/find"
ARGS+=( "$@" )
echo CALLING: "${ARGS[@]}"
"${ARGS[@]}"
}
find2 /tmp/test -name "hello.c"
Но это работает и гораздо проще:
find2() {
ARGS=( "/usr/bin/find" "$@" )
echo CALLING: "${ARGS[@]}"
"${ARGS[@]}"
}
find2 /tmp/test -name "hello.c"
Конечно, прямой способ тоже работает (в любой оболочке с функциями):
find2() { /usr/bin/find "$@"; }
find2 /tmp/test -name "hello.c"
Чтобы "увидеть", что делает код, можно использовать set -x или, еще лучше, заменить echo на printf, вот так:
find2() {
ARGS="/usr/bin/find"
ARGS+=( "$@" )
printf '<%s> ' CALLING: "${ARGS[@]}"; echo
"${ARGS[@]}"
}
find2 /tmp/test -name "hello.c"
Выполнив его, вы увидите:
$ ./script.sh
<CALLING:> </usr/bin/find> </tmp/test> <-name> <hello.c>
Каждый аргумент - отдельный элемент (обратите внимание на положение <>).
Однако в исходном коде (добавив printf):
function find2 {
ARGS="/usr/bin/find"
while [[ $# -gt 0 ]]; do
ARGS="$ARGS '$1'"
shift
done
printf '<%s> ' CALLING: "${ARGS[@]}"; echo
$ARGS
}
find2 /tmp/test -name "hello.c"
При выполнении вы получите:
$ ./script.sh
<CALLING:> </usr/bin/find '/tmp/test' '-name' 'hello.c'>
Все значения представляют собой длинную текстовую строку, а не отдельные аргументы (обратите внимание на позицию <>).
Причина, по которой все дело в существовании переменной $ MANPATH
: Для перезаписи, если требуется настраиваемый путь к руководству.
Цитирование страниц руководства Debian Lenny:
ОПИСАНИЕ
Если задано
$ MANPATH
, manpath просто отобразит его содержимое и выдаст предупреждение. В противном случае manpath определит подходящий путь поиска иерархии страниц руководства и отобразит результаты.Разделенный двоеточиями путь определяется с использованием информации, полученной из файла конфигурации man-db - (
/etc/manpath.config
) и среды пользователя .
Когда на странице руководства говорится: «Если $ MANPATH
установлен», это означает «если эта переменная установлена пользователем или скриптом ...» или «если эта переменная пуста, используйте значения по умолчанию находятся в manpath.config
".
Найдите время и пролистайте файл /etc/manpath.config
, чтобы узнать, как структурированы все пути к страницам руководства.
Связанные материалы:
Некоторые ссылки о манипулировании $ MANPATH
или создании пользовательского пути к страницам руководства.
$ MANPATH
. Из моего man manpath
(Ubuntu 16. 10 - поскольку вы не упомянули детали вашей системы):
Если $MANPATH установлен, manpath отображает его значение, а не определяет его а не определяет его на лету.
Таким образом, $MANPATH
- это скорее переопределение конфигурации по умолчанию, заданной в /etc/manpath.config
.
Примечание также:
ОПИСАНИЕ
Если $MANPATH установлен, manpath просто отобразит его содержимое и выдаст предупреждение. Если нет, manpath определит подходящий путь поиска иерархии страниц руководства и отобразит результаты.