检查shell中是否存在命令行参数

时间:2014-07-18 18:18:33

标签: shell

我想检查运行shell脚本时是否存在命令行选项,例如

./test.sh arg1 arg2 arg3 arg4

想要检查其中一个参数是否是arg3(不一定是第三个参数)

快速解决方案是使用for循环并检查其中一个参数是否与给定字符串匹配,但是有更好的方法在$ @中使用'arg3'形式。

1 个答案:

答案 0 :(得分:2)

(假设是bash)

我会这样做:

have_arg3=false
for arg; do
    if [[ $arg == "arg3" ]]; then
        have_arg3=true
        break
    fi
done
if $have_arg3; then
    echo "arg3 is present
fi

但你可以这样做(下面的所有引号和空格都是必需的!):

if [[ " $* " == *" arg3 "* ]]; then
    echo "arg3 is present"
fi

可以封装在一个函数中:

$ arg_in_args () (
    arg=$1
    shift
    IFS=:
    [[ "$IFS$*$IFS" == *"$IFS$arg$IFS"* ]]
)
$ set -- foo bar baz
$ if arg_in_args "arg3" "$@"; then echo Y; else echo N; fi
N
$ if arg_in_args "baz" "$@"; then echo Y; else echo N; fi
Y