2008-11-03 29 views
1

我有一個簡單的Linux腳本:爲什麼雙引號改變這一結果

#!/bin/sh 
for i in `ls $1` 
do 
     echo $i 
done 

在我的temp文件夾中有4檔:AA,a.aa,a.ab和a.ac

當我打電話./script temp/*。??我得到:

temp/a.aa 

當我打電話./script「temp/*。??」我得到:

temp/a.aa 
temp/a.ab 
temp/a.ac 

爲什麼雙引號改變結果?

回答

7

在第一種情況下,外殼擴展temp/*.??到:

temp/a.aa temp/a.ab temp/a.ac 

由於您只看着你的腳本中的第一個參數僅temp/a.aa傳遞給LS。

在第二種情況下,由於引號,shell不執行任何擴展,並且腳本收到在調用ls時展開的單個參數temp/*.??

1

由於不帶引號的外殼擴展您的來電:

./script temp/a.aa temp/a.ab temp/a.ac 

所以$1temp/a.aa,而不是temp/*.??

相關問題