2014-07-18 39 views
1

命令行參數我要檢查,如果運行shell腳本時存在一個命令行選項,例如是否存在檢查殼

./test.sh arg1 arg2 arg3 arg4 

要檢查參數之一是說ARG3(不必然是第三個參數)

快速解決方案是使用for循環並檢查一個參數是否與給定的字符串匹配,但是有沒有更好的方法來完成$ @中的形式'arg3'。

回答

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" "[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 
+0

第二種解決方案是我想要的,謝謝。 – sysuser

+0

第一種解決方案將起作用;如果參數可以包含空格(或者您試圖用來分隔參數的任何內容),則第二種解決方案可能不起作用。 – chepner