1
命令行參數我要檢查,如果運行shell腳本時存在一個命令行選項,例如是否存在檢查殼
./test.sh arg1 arg2 arg3 arg4
要檢查參數之一是說ARG3(不必然是第三個參數)
快速解決方案是使用for循環並檢查一個參數是否與給定的字符串匹配,但是有沒有更好的方法來完成$ @中的形式'arg3'。
命令行參數我要檢查,如果運行shell腳本時存在一個命令行選項,例如是否存在檢查殼
./test.sh arg1 arg2 arg3 arg4
要檢查參數之一是說ARG3(不必然是第三個參數)
快速解決方案是使用for循環並檢查一個參數是否與給定的字符串匹配,但是有沒有更好的方法來完成$ @中的形式'arg3'。
(假設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" "[email protected]"; then echo Y; else echo N; fi
N
$ if arg_in_args "baz" "[email protected]"; then echo Y; else echo N; fi
Y
第二種解決方案是我想要的,謝謝。 – sysuser
第一種解決方案將起作用;如果參數可以包含空格(或者您試圖用來分隔參數的任何內容),則第二種解決方案可能不起作用。 – chepner