【问题标题】:Why do double-quote change the result为什么双引号会改变结果
【发布时间】:2010-09-20 11:58:46
【问题描述】:

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

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

【问题讨论】:

    标签: linux bash shell scripting


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

      因为没有引号,shell 会将您的调用扩展到:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-06-05
        • 1970-01-01
        • 2019-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多