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