2008-11-03 30 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/*.??

相关问题