为什么双引号会改变结果

时间:2008-11-03 14:18:31

标签: linux bash shell scripting

我有一个简单的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

为什么双引号会改变结果呢?

2 个答案:

答案 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

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