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

时间:2019-04-05 14:46:11

标签: bash

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

这是bash命令l=(*) for v in ${l[@]} do echo $v done 的快捷方式吗?

arc
cgi-bin
dist

输出:

{{1}}

有趣的是,如果我在bash shell中键入“ *”,则会收到错误消息“ bash:arc:command not found”,想必这是某种原因吗?

2 个答案:

答案 0 :(得分:7)

否;括号仅在此上下文中声明一个数组。外壳是扩展*全局的东西。

更多细节

variable=(value1 value2)

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

*

您正在尝试运行命令

arc cgi-bin dist

如果您在arc的任何地方都没有名为PATH的保护罩,那当然会失败。

顺便说一句,${l[@]}是不正确的;您绝对希望"${l[@]}"用双引号引起来-否则您将失去数组中所有带引号的字符串的完整性(就像$@基本上总是一个错误,并且必须为"$@")。只需打印数组,就不需要循环;

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

答案 1 :(得分:1)

尝试输入echo *,这将使事情变得更清楚。

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

for v in *
do 
    echo "$v"
done