Как выполнить итерацию аргументов в сценарии bash?

Есть ли какой-либо метод для итерации переданных аргументов в сценарии 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) ...

1
задан 13 April 2017 в 15:23

1 ответ

Использование while + shift кажется более универсальным для меня:

while [ ! "$1" == "" ]; do
    case "$1" in
    "--mode" )
            MODE="$1 $2"
            shift
            ;;
    "--clean" )
            CLEAN="$1"
            ;;
    esac
    shift
done

Вы можете, затем передать аргументы переменной длины терминов. Обратите внимание, что в случае режима он выполняет дополнительный сдвиг, кроме того, который был до конца цикла.

0
ответ дан 24 May 2018 в 11:09
  • 1
    если вам нужно работать с параметрами, вы можете найти getopt полезным. – Carlos Campderrós 4 March 2014 в 19:56
  • 2
    Если вы собираетесь это сделать, условие должно быть while [ -n "$1" ]. – Kevin 4 March 2014 в 22:02

Другие вопросы по тегам:

Похожие вопросы: