给定以下部分bash脚本,如何解释第一行?
这是bash命令ls
的快捷方式吗?
l=(*)
for v in ${l[@]}
do
echo $v
done
输出:
arc
cgi-bin
dist
有趣的是,如果我在bash shell中键入“*”,我会收到错误“bash:arc:command not found”,大概这是以某种方式相关的?
没有;括号只是在此上下文中声明一个数组。 shell是扩展*
glob的东西。
更详细一点,
variable=(value1 value2)
声明一个包含两个元素的数组;并且glob *
扩展为当前目录中所有(非隐藏)文件的名称。如果您有名为arc
,cgi-bin
和dist
的文件或目录,请键入
*
您正在尝试运行该命令
arc cgi-bin dist
当你在arc
的任何地方都没有名为PATH
的cormand时,当然会失败。
顺便说一句,${l[@]}
是不正确的;你肯定希望"${l[@]}"
有双引号 - 否则你正在失去数组中任何引用字符串的完整性(就像$@
基本上总是一个错误,需要是"$@"
)。要打印数组,您不需要循环;
printf '%s\n' "${l[@]}"
尝试输入echo *
,这将使事情更加清晰。
顺便说一句,你也可以写:
for v in *
do
echo "$v"
done