Unix Shell脚本意外输出

时间:2014-01-16 15:58:41

标签: shell scripting sh ksh

我有这个KornShell(ksh)脚本。它仅打印ab。我不确定为什么只打印这两个字母?

脚本:

#!/bin/ksh
for i in [global]
do
        echo $i
done
exit 0

输出:

./a.sh
a
b

我需要理解shell如何解释[global]字。

2 个答案:

答案 0 :(得分:3)

因为字符串[global]被shell视为glob模式,并尝试匹配当前目录中具有单字符名称的任何文件{a, b, g, l, o}。您在该目录中有两个文件,分别名为ab。如果您希望将[global]视为字符串,请添加一些引号:

for i in "[global]"
do
  echo "$i"
done

引用可防止通配。

答案 1 :(得分:0)

这个ksh脚本在Cygwin中使用ksh版本正常工作: MIRBSD KSH R48 2013/08/16

Ksh脚本

#!/bin/ksh
for i in [global]
do
    echo ${i}
done
exit 0

Ksh脚本输出:

userr@foo:/tmp $ ksh so7.ksh
ksh so7.ksh
[global]
userr@foo:/tmp $ echo $KSH_VERSION
echo $KSH_VERSION
@(#)MIRBSD KSH R48 2013/08/16
userr@foo:/tmp $ sh so7.ksh
sh so7.ksh
[global]