我有这个KornShell(ksh)脚本。它仅打印a
和b
。我不确定为什么只打印这两个字母?
脚本:
#!/bin/ksh
for i in [global]
do
echo $i
done
exit 0
输出:
./a.sh
a
b
我需要理解shell如何解释[global]字。
答案 0 :(得分:3)
因为字符串[global]
被shell视为glob模式,并尝试匹配当前目录中具有单字符名称的任何文件{a, b, g, l, o}
。您在该目录中有两个文件,分别名为a
和b
。如果您希望将[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]