在Bash脚本中,如何解释(*)?

问题描述 投票:1回答:2

给定以下部分bash脚本,如何解释第一行?

这是bash命令ls的快捷方式吗?

l=(*)
for v in ${l[@]}
do 
    echo $v  
done

输出:

arc
cgi-bin
dist

有趣的是,如果我在bash shell中键入“*”,我会收到错误“bash:arc:command not found”,大概这是以某种方式相关的?

bash
2个回答
7
投票

没有;括号只是在此上下文中声明一个数组。 shell是扩展* glob的东西。

更详细一点,

variable=(value1 value2)

声明一个包含两个元素的数组;并且glob *扩展为当前目录中所有(非隐藏)文件的名称。如果您有名为arccgi-bindist的文件或目录,请键入

*

您正在尝试运行该命令

arc cgi-bin dist

当你在arc的任何地方都没有名为PATH的cormand时,当然会失败。

顺便说一句,${l[@]}是不正确的;你肯定希望"${l[@]}"有双引号 - 否则你正在失去数组中任何引用字符串的完整性(就像$@基本上总是一个错误,需要是"$@")。要打印数组,您不需要循环;

printf '%s\n' "${l[@]}"

1
投票

尝试输入echo *,这将使事情更加清晰。

顺便说一句,你也可以写:

for v in *
do 
    echo "$v"
done
© www.soinside.com 2019 - 2024. All rights reserved.