Как мне перебрать аргументы в 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) ...

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

2 ответа

Необходимо использовать $@ для обращения ко всем аргументам:

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

0
ответ дан 13 April 2017 в 15:23

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

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

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

0
ответ дан 13 April 2017 в 15:23

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

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