bash変数に重複したパラメータを入れてシェルスクリプトをクリーンアップしようとしています。
私が知っている最良の方法は、配列に入れて渡すことです。しかし、うまくいかないようです。すべてのパラメータを変数に保存するには?
これはうまくいきません:
TESTP=( "-path" "\"./var/*\"")
echo ${TESTP[@]}
# Results in: -path "./var/*"
find ${TESTP[@]}
# Returns no results.
whileはfind -path "./var/*"
varの下のすべてのファイルを返します。
答え1
次の配列要素を引数として渡そうとしますfind
。
TESTP=(-path './var/*')
find . "${TESTP[@]}"
それとも新しく作ってください。シェルコマンドラインを入力し、シェルにそれを解釈するように依頼します(およびその中の引用符)。
TESTP='-path "./var/*"'
eval "find . $TESTP"
あるいは、スカラー変数に分割+glob演算子を使用することもできます(質問で変数を引用符で囲むことで演算子を不適切に使用する)。
TESTP='-path,./var/*'
set -f # no glob
IFS=, # split on ,
find . $TESTP
あなたの、
TESTP=( "-path" "\"./var/*\"")
find ${TESTP[@]}
${TESTP[@]}
まず、配列要素(および-path
に拡張され、名前がディレクトリで終わるファイルに拡張できます)。"./var/*"
$IFS
"
"./var
ディレクトリが存在しない可能性が高い".
ため、両方のパラメータが保持されて渡されますfind
。
find -path '"./var/*"'
つまり、ディレクトリ内"./var
の特定の文字で終わるファイルを見つけます"
。