使用通配符扩展 item={one,two,three}

roa*_*ima 6 bash wildcards

如果我使用bash's 大括号扩展,我会得到一个列表

echo item={one,two,three}
item=one item=two item=three
Run Code Online (Sandbox Code Playgroud)

假设我在一个包含与通配符匹配的文件/文件夹的目录中,有没有办法让扩展与这些文件/文件夹匹配?

ls
blue  green  red

echo item=*      # Obviously not
item=*

echo item={*}    # Maybe? ...but no
item={*}
Run Code Online (Sandbox Code Playgroud)

在我的例子中,我希望扩展是 item=blue item=green item=red

我得到的最好的就是这样的代码

items=()
for dirent in *; do items+=("item=$dirent"); done
echo "${items[@]}"

item=blue item=green item=red
Run Code Online (Sandbox Code Playgroud)

Ste*_*itt 8

您可以将当前目录的文件存储在一个数组中,如下所示:

items=(*)
Run Code Online (Sandbox Code Playgroud)

然后可以使用参数扩展来添加前缀:

printf "%s\n" "${items[@]/#/item=}"
Run Code Online (Sandbox Code Playgroud)

您可以使用它来更新数组:

items=("${items[@]/#/item=}")
Run Code Online (Sandbox Code Playgroud)