如何删除 bash 中的位置参数...一个真正有效的答案

问题描述 投票:0回答:1

我有一个带有参数的脚本,我想删除给定的命名参数

例如脚本.sh a b c 我想删除 'b' 这样

    $1 = a
    $2 = c

这也必须适用于任何给定的参数集,例如

    script.sh "a 1" b "c 2"
    $1 = "a 1"
    $2 = "c 2"

之前的回答说

    for var in "$@"; do
        case $var in
            "a") echo -n $var ;;
            "b") ;;
        esac
    done

上一个答案的通用版本应该是(为了删除 b)

    for var in "$@"; do
        case $var in
            "b") ;;
            *) echo -n $var ;;
        esac
    done

但是对于多个参数这会失败 例如

    script.sh a b c
    Output: ac

我们想要一个b 我们希望它们位于位置参数 $1=a 和 $2=b

所以需要一个更好的答案。

bash shell parameters arguments
1个回答
0
投票

我就是这样做的,效果很好。 示例从参数列表中删除“b”

    # script.sh 
    # Just to show the passed parameters
    echo 1=$1
    echo 2=$2
    echo 3=$3
    echo ===
    rmArg()
    {
        for var in "$@"; do
            case $var in
                b) ;;
                *) echo -n " '$var'" ;;
            esac
        done
    }
    
    args=$( rmArg "$@" )
    eval "set $args"
    
    # Just to show the new parameter list
    echo 1=$1
    echo 2=$2
    echo 3=$3

    $ script.sh "a 1" b "c 2"
    1=a 1
    2=b
    3=c 2
    ===
    1=a 1
    2=c 2
    3=
© www.soinside.com 2019 - 2024. All rights reserved.