我有一个简单的linux脚本:
#!/bin/sh
for i in `ls $1`
do
echo $i
done
在我的临时文件夹中有4个文件:a.a,a.aa,a.ab和a.ac
当我打电话给./script temp / *。??我明白了:
temp/a.aa
当我打电话给./script“temp / *。??”我明白了:
temp/a.aa
temp/a.ab
temp/a.ac
为什么双引号会改变结果呢?
答案 0 :(得分:7)
在第一种情况下,shell将temp/*.??
扩展为:
temp/a.aa temp/a.ab temp/a.ac
由于您只查看脚本中的第一个参数,因此只将temp/a.aa
传递给ls。
在第二种情况下,由于引号,shell不会执行任何扩展,并且脚本会收到在temp/*.??
调用中展开的单个参数ls
。
答案 1 :(得分:1)
因为没有引号,shell会将您的调用扩展为:
./script temp/a.aa temp/a.ab temp/a.ac
所以$1
是temp/a.aa
而不是temp/*.??
。