Есть ли способ перебирать переданные аргументы в скрипте bash? Этот ответ из моего вопроса показывает, как использовать каждый аргумент, но я хочу повторить их, потому что число аргументов является переменным.
Я пробовал что-то вроде:
for i in {1..10}
do
if [[ -f "$($i)" ]]
then
echo "$($i) is a file"
elif [[ -d "$($i)" ]]
then
echo "$($i) is a directory"
else
echo "$($i) is not a file or directory"
fi
done
Но это дает мне ошибки. Я пытался также использовать без успеха $i
вместо $($i)
...
Необходимо использовать $@
для обращения ко всем аргументам:
for arg in "$@"
do
if [[ -f "$arg" ]]
then
echo "$arg is a file"
elif [[ -d "$arg" ]]
then
echo "$arg is a directory"
else
echo "$arg is not a file or directory"
fi
done
См. также: http://www.tldp.org/LDP/abs/html/internalvariables.html#ARGLIST
Использование while + shift
кажется более универсальным мне:
while [ ! "$1" == "" ]; do
case "$1" in
"--mode" )
MODE="$1 $2"
shift
;;
"--clean" )
CLEAN="$1"
;;
esac
shift
done
Вы можете, затем передать аргументы переменной длины условий. Обратите внимание, что в случае режима это делает дополнительный сдвиг помимо того перед концом цикла.