2010-05-08 26 views
0

我正在編寫一個應該接收3個或更多參數的shell腳本(tcsh)。前3個將被傳遞給一個程序,其餘的應該被傳遞給另一個程序。總而言之腳本應該是這個樣子:在tcshell中傳遞部分參數

./first_program $1 $2 $3 
./second program [fourth or more] 

的問題是,我不知道該怎麼辦了後者 - 傳遞是第三之後的所有參數。

回答

1

您可以使用shift如下:

./first_program $1 $2 $3 

shift # shift 3 times to remove the first 3 parameters. 
shift 
shift 

./second program $* 

$*包含剩餘參數。

在執行shift之前,您還必須執行錯誤檢查,方法是檢查$#argv並確保它不爲零。或者,您可以在腳本的明星處檢查$#argv的值,並確保它至少爲3

2

我向你的shift命令:

shift [變量]
沒有參數,丟棄argv[1]argv成員轉移到左側。

例子:

$ cat /tmp/tcsh.sh 
#!/bin/tcsh 

echo "$1" "$2" "$3" 
shift 
shift 
shift 
echo "$*" 
$ /tmp/tcsh.sh 1 2 3 4 5 6 
1 2 3 
4 5 6