Есть ли какой-либо метод для итерации переданных аргументов в сценарии 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) ...
Использование while + shift кажется более универсальным для меня:
while [ ! "$1" == "" ]; do
case "$1" in
"--mode" )
MODE="$1 $2"
shift
;;
"--clean" )
CLEAN="$1"
;;
esac
shift
done
Вы можете, затем передать аргументы переменной длины терминов. Обратите внимание, что в случае режима он выполняет дополнительный сдвиг, кроме того, который был до конца цикла.