我正在尝试构建一个涉及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[@]}

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

08-26 21:48
查看更多