【发布时间】:2023-06-28 00:27:01
【问题描述】:
我可以使用花括号和.. 进行如下组合:
$ echo {"foo","bar"}{1..2}
foo1 foo2 bar1 bar2
如果我有两个数组arr1=("foo" "bar") 和arr2=(1 2),是否可以实现相同的效果?
例如:
$ echo ${arr1[@]}${arr2[@]} # Returns "foo bar1 2"
or
$ echo {${arr1[@]}}{${arr2[@]}} # Returns "{foo bar}{1 2}"
【问题讨论】:
-
我希望你控制数组的内容。如果
arr1=( '$(rm -rf ~)' ),基于eval的方法不会有好的结局。 -
我从 /etc/passwd 获取用户主目录列表,然后在每个用户目录中的硬编码文件数组中进行 grepping。我想我已经决定只使用 for 循环... ;)
-
那么这就提出了一个不同的问题。使用
grep,您可以使用grep -f <(printf "%s\n" "${array[@]}")对多个模式进行grep。请不要问 XY 问题。 -
@KamilCuk, ...所以,我认为 上述用例中的array1是主目录列表,array2是要搜索的文件名列表在这些目录中,因此不一定是他们试图提供给 grep 的模式数组。也就是说——是的,他们应该已经描述了用例,但我不确定这是那个特定的 XY问题。
标签: arrays bash curly-braces