bash-скрипт принимает фиксированные значения аргументов вместо фактически переданных - PullRequest
0 голосов
/ 07 февраля 2011

У меня есть простой bash-скрипт find.sh для поиска файлов

==>cat find.sh

echo $1

find -name $1

, но иногда он не принимает правильные аргументы, вместо этого он принимает фиксированный аргумент

Например

find.sh 'ECSv2_P_TCP_FUNC_060*'

ECSv2_P_TCP_FUNC_060 ECSv2_P_TCP_FUNC_060.backup

Здесь, хотя я передал 'ECSv2_P_TCP_FUNC_060 *', он принял ECSv2_P_TCP_FUNC_060 ECSv2_P_TCP_FUNC_060.backup в качестве аргументов.

Почему это происходит?И как этого избежать?

Ответы [ 2 ]

5 голосов
/ 07 февраля 2011

Вам необходимо также защитить символ * от расширения оболочки внутри скрипта:

echo "$1"
find . -name "$1"

(отредактировано для включения текущего каталога в качестве аргумента для поиска.)

1 голос
/ 07 февраля 2011

Ваш сценарий действительно принимает аргумент, но сценарий расширяет * перед тем, как передать его в echo, и find читает аргумент и интерпретирует *.(На самом деле, find, вероятно, является бомбардировкой, потому что первым аргументом должен быть каталог. Например, 'find. -Name $ 1')

...