2014-09-23 40 views
-3

我正在查看一個shell腳本。這兩條線是做什麼的?

lib=$1 
shift 

非常感謝。

+1

在尋求本網站的幫助之前,您通常會希望您花費一些自己的努力試圖追蹤解決方案。 – 2014-09-23 20:20:12

+0

給出的兩行等價於'lib = $ 1; shift',而不是'lib = $ 1 shift' - 分號有所不同。 – 2014-09-23 23:39:38

回答

0

shift遍歷shell的參數列表。有關shift,請參閱man page

因此,這兩行後,lib=$2

更清楚地示例:

echo 「arg1= $1 arg2=$2」 
shift 
echo 「arg1= $1 arg2=$2」 
shift 
echo 「arg1= $1 arg2=$2」 
shift 

輸出:

arg1= 1 arg2=2 
arg1= 2 arg2= 
arg1= arg2= 

實施例2:

echo 「arg1= $1 arg2=$2 arg3=$3 arg4=$4」 
shift 
echo 「arg1= $1 arg2=$2 arg3=$3 arg4=$4」 
shift 
echo 「arg1= $1 arg2=$2 arg3=$3 arg4=$4」 
shift 
echo 「arg1= $1 arg2=$2 arg3=$3 arg4=$4」 
shift 
echo 「arg1= $1 arg2=$2 arg3=$3 arg4=$4」 
shift 

輸出:

arg1=1 arg2=2 arg3=3 arg4=4 
arg1=2 arg2=3 arg3=4 arg4= 
arg1=3 arg2=4 arg3= arg4= 
arg1=4 arg2= arg3= arg4= 
arg1= arg2= arg3= arg4= 
+0

感謝您的回答。我創建了一個名爲shell.sh的文件並將您的命令行復制到文件中。然後我測試了兩個命令: 'sh shell.sh 1 2',它向我顯示了你的輸出。我建議用命令'sh shell.sh 1 2 3 4'來做另一個測試。它解釋了什麼轉變很好。 – Amy 2014-09-23 22:50:21

+0

更新了第二個例子。如果這是有益的,考慮標記爲答案以幫助其他人提出同樣的問題。 – cppprog 2014-09-23 23:10:21

+0

「穿越」? 「彈出第一個項目」可能更準確。沒有必要進行任何遍歷 - 如果'$ @'存儲爲鏈表,例如,可以通過僅更改該列表的頭指針來執行「shift」,而不需要遍歷。 – 2014-09-23 23:37:52