我正在尝试构建一个涉及 find
的长命令。我有一个我想忽略的目录数组,我想将此目录格式化为命令。
基本上,我想转换这个数组:
declare -a ignore=(archive crl cfg)
进入这个:
-o -path "$dir/archive" -prune -o -path "$dir/crl" -prune -o -path "$dir/cfg" -prune
这样,我可以简单地将目录添加到数组中,find
命令会做相应的调整。
到目前为止,我想出了如何使用前置或附加
${ignore[@]/#/-o -path \"\$dir/}
${ignore[@]/%/\" -prune}
但我不知道如何将这些组合起来并同时添加到数组的每个元素。
最佳答案
你不能同时轻松地做到这一点。幸运的是,您不需要:
ignore=( archive crl cfg )
ignore=( "${ignore[@]/%/\" -prune}" )
ignore=( "${ignore[@]/#/-o -path \"\$dir/}" )
echo ${ignore[@]}
注意括号和双引号 - 它们确保数组在每次替换后包含三个元素,即使涉及空格。
关于arrays - Bash 数组 : appending and prepending to each element in array,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17602847/