Bash数组:追加并添加到数组中的每个元素

jh3*_*314 6 arrays bash shell formatting

我正在尝试构建一个涉及的长命令find.我有一个我想忽略的目录数组,我想将这个目录格式化为命令.

基本上,我想转换这个数组:

declare -a ignore=(archive crl cfg)
Run Code Online (Sandbox Code Playgroud)

进入这个:

-o -path "$dir/archive" -prune -o -path "$dir/crl" -prune -o -path "$dir/cfg" -prune
Run Code Online (Sandbox Code Playgroud)

这样,我只需将目录添加到数组中,find命令就会相应调整.

到目前为止,我想出了如何前置或附加使用

${ignore[@]/#/-o -path \"\$dir/}
${ignore[@]/%/\" -prune}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何组合这些并同时前置和附加到数组的每个元素.

cho*_*oba 12

你不能同时做到这一点.幸运的是,您不需要:

ignore=( archive crl cfg                    )
ignore=( "${ignore[@]/%/\" -prune}"         )
ignore=( "${ignore[@]/#/-o -path \"\$dir/}" )

echo ${ignore[@]}
Run Code Online (Sandbox Code Playgroud)

注意括号和双引号 - 它们确保每次替换后数组包含三个元素,即使涉及空格也是如此.