为什么双引号会改变结果

Bur*_*ard 1 linux bash shell scripting

我有一个简单的Linux脚本:

#!/bin/sh
for i in `ls $1`
do
       echo $i
done
Run Code Online (Sandbox Code Playgroud)

在我的临时文件夹中有4个文件:aa,a.aa,a.ab和a.ac.

当我打电话给./script temp/*.?? 我得到:

temp/a.aa
Run Code Online (Sandbox Code Playgroud)

当我打电话给./script"temp/*.??" 我得到:

temp/a.aa
temp/a.ab
temp/a.ac
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*ble 7

在第一种情况下,shell扩展temp/*.??为:

temp/a.aa temp/a.ab temp/a.ac
Run Code Online (Sandbox Code Playgroud)

由于您只查看脚本中的第一个参数,因此只temp/a.aa传递给ls.

在第二种情况下,由于引号,shell不执行任何扩展,并且脚本接收temp/*.??在调用中展开的单个参数ls.