10

を含む長いコマンドを作成しようとしてい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}

しかし、これらを組み合わせて、配列の各要素の先頭と末尾に同時に追加する方法がわかりません。

4

4 に答える 4

14

簡単には同時にできません。幸いなことに、次のことは必要ありません。

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

echo ${ignore[@]}

括弧と二重引用符に注意してください。スペースが含まれていても、各置換後に配列に 3 つの要素が含まれていることを確認します。

于 2013-07-11T20:37:43.883 に答える