将数组转换为命令的参数的公认答案?使用以下 Bash 命令:
command "${my_array[@]/#/-}" "$1"
我正试图弄清楚这/#/-
部分到底是做什么的。不幸的是,我不知道该怎么称呼它,所以我很难找到任何文档。我浏览了有关数组和一些网站的 Bash 手册页部分,但找不到任何东西。
将数组转换为命令的参数的公认答案?使用以下 Bash 命令:
command "${my_array[@]/#/-}" "$1"
我正试图弄清楚这/#/-
部分到底是做什么的。不幸的是,我不知道该怎么称呼它,所以我很难找到任何文档。我浏览了有关数组和一些网站的 Bash 手册页部分,但找不到任何东西。
这是shell 参数扩展中模式替换的一个实例:
${parameter/pattern/replacement}
扩展${parameter}
,替换第一个实例pattern
withreplacement
。在这种模式的上下文中,#
它是特殊的:它将模式锚定到参数的开头。所有这一切的最终结果是扩展my_array
数组中的所有值,添加-
到每个值之前(通过替换每个参数开头的空模式)。是的,它是shell 参数扩展中的模式替换:
但是如果第一个字符之后的第一个字符
/
是/
or#
or%
则它具有all
(repeated) 的特殊含义,start
并且end
.和:
单个
/
将替换第一个实例。第一个实例one
:或第一个实例
two
:最后的实例
one
:的所有重复
two
:one
开头的实例:#
以(引用)开头的字符串#
:但是,如果您单独留下 #(未加引号),则替换设置在变量的开头:
此外,如果参数是数组,则对所有元素进行替换: