我正在尝试构建一个涉及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[@]}
注意括号和双引号-它们确保数组在每次替换后包含三个元素,即使涉及空格。