如何在 Bash 脚本中迭代参数?

如何在 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

您应该使用$@来引用所有参数:

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

答案2

对我来说,用法while + shift似乎更加灵活:

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

然后,您可以传递可变长度的参数。请注意,在模式下,除了循环结束前的移位外,它还会进行额外的移位。

相关内容