2013-08-30 64 views
-4

我是新來砸,我對下面的代碼一個簡單的問題:arg1命令是做什麼的?

echo "xyz" > file 
f1="xy" 

while cat file | grep $f1 #this is inefficient, I know 
do 
    set arg1 $1 # ok what's that?! 
done 

CMD參數:test1的

問題1:set arg1 $1設置CMD參數 「ARG1測試1」,是否正確? arg1只是一個隨機名稱?

問題2:cat file | grep $f1僅在文件中存在$f1時才返回true,否則它不會進入while循環。正確?

+2

問題2:是的。如果它匹配,它會永遠循環,這可能不是你想要的 – cyberz

+1

問題1:是的,正確的。但是請注意,由於'$ 1''可以包含空格,因此您很可能要使用''set arg1'$ 1「'''。 –

+0

是的,謝謝。我理解downvotes,雖然這不是我的代碼,但從我對bash的測試。你能否將你的意見作爲答案來處理,以便我能接受? –

回答

3

您已回答自己的問題。 But do not forget about quotes around your variables. 此外,您不必使用cat將文件傳遞到grep,因爲grep允許您指定文件。

這裏有點改進版:

echo 'xyz' > file 
f1='xy' 

while grep -q "$f1" file; do # will loop forever if this file contains $f1 pattern. 
    set arg1 "$1" 
done 
+2

除非'set'的用途是專門將'$ 1'的值分割爲空格(或者更常見的是'$ IFS'中的字符),這是'set'的一個常見用例。 – tripleee

+2

另外,您可能需要'grep -q'來避免將匹配連續打印到屏幕上。 – tripleee