代码之家  ›  专栏  ›  技术社区  ›  Burkhard

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

  •  1
  • Burkhard  · 技术社区  · 16 年前

    我有一个简单的Linux脚本:

    #!/bin/sh
    for i in `ls $1`
    do
           echo $i
    done
    

    在我的temp文件夹中有4个文件:a.a、a.a a、a.ab和a.ac

    当我调用./script temp/*.?我得到:

    temp/a.aa
    

    当我调用./script“temp/*”时。“我得到:

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

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

    2 回复  |  直到 16 年前
        1
  •  7
  •   Robert Gamble    16 年前

    在第一种情况下,外壳会膨胀 temp/*.?? 到:

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

    因为您只查看脚本中的第一个参数 temp/a.aa 传递给ls。

    在第二种情况下,由于引号的原因,shell不执行任何扩展,并且脚本接收单个参数 TEMP/*?? 在呼叫中扩展到 ls .

        2
  •  1
  •   CesarB    16 年前

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

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

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