我想检查运行shell脚本时是否存在命令行选项,例如
./test.sh arg1 arg2 arg3 arg4
想要检查其中一个参数是否是arg3(不一定是第三个参数)
快速解决方案是使用for循环并检查其中一个参数是否与给定字符串匹配,但是有更好的方法在$ @中使用'arg3'形式。
答案 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