アーカイブにすべてのファイルが含まれていることをテストしようとしています。私がしなければならなかったのは、単に解凍して作ることだけでした。シェルは-aoq
プログラムのように引数を解釈しようとし続けます。他のエラーもありますが、あらゆる点で読者を助けます。いいえ行ってください。失敗した試みは次のとおりです。
失敗:
RESULT=$(unzip -aoq cryptopp563.zip -d "$TMP/cryptopp563-zip/")
if [[ "$RESULT" -eq "0" ]]; then ... fi;
RESULT=$(unzip (-aoq cryptopp563.zip -d "$TMP/cryptopp563-zip/"))
if [[ "$RESULT" -eq "0" ]]; then ... fi;
RESULT=$(unzip ("-aoq" "cryptopp.zip" "-d" "$TMP/cryptopp-zip/"))
if [[ "$RESULT" -eq "0" ]]; then ... fi;
RESULT=$(unzip "-aoq cryptopp563.zip -d $TMP/cryptopp563-zip/")
if [[ "$RESULT" -eq "0" ]]; then ... fi;
RESULT=$(unzip "{-aoq cryptopp563.zip -d "$TMP/cryptopp563-zip/"}")
if [[ "$RESULT" -eq "0" ]]; then ... fi;
RESULT=$(unzip "(-aoq cryptopp563.zip -d "$TMP/cryptopp563-zip/")")
if [[ "$RESULT" -eq "0" ]]; then
...
他の質問と「括弧のみを使用してください」、「引用符のみを使用してください」、または「中括弧のみを使用してください」という回答を見ると、悲鳴を上げると思います。
unzip
Bashが引数をコマンドとして解釈しないように引数を使用して呼び出すにはどうすればよいですか?
以下は、より面白いエラーメッセージの一部です。
unzip: cannot find or open {-aoq cryptopp563.zip -d /tmp/cryptopp563-zip/}, {-aoq cryptopp563.zip -d
/tmp/cryptopp563-zip/}.zip or {-aoq cryptopp563.zip -d /tmp/cryptopp563-zip/}.ZIP.
unzip: cannot find or open (-aoq cryptopp563.zip -d /tmp/cryptopp563-zip/), (-aoq cryptopp563.zip -d
/tmp/cryptopp563-zip/).zip or (-aoq cryptopp563.zip -d /tmp/cryptopp563-zip/).ZIP.
以下は私には適していないいくつかの質問/回答です。私はU&L.SE、Stack Overflow、Super Userを何度も訪れたと確信しています。
答え1
最初:
RESULT=$(unzip -aoq cryptopp563.zip -d "$TMP/cryptopp563-zip/")
よく戻ってunzip
捨てなければなりません。出力しかし、RESULT
これはunzip
標準出力としてあまり印刷されないので(使用されない限りunzip -l
)実際に戻り値が欲しいと思います。$?
割り当てとコマンドの置き換え後、またはプログラムを正常に実行した後に見つけることができます。
unzip -aoq cryptopp563.zip -d "$TMP/cryptopp563-zip/"
if [ "$?" -eq 0 ] ; then echo ok ; fi
(そうそうできますif unzip ... ; then ...
。)
しかし、実際の配列はなく、コマンドの一般的な引数しかありません。これは配列を作成し、長さを印刷してパラメータに渡しますunzip
。
A=(-aoq cryptopp563.zip -d "$TMP/cryptopp563-zip/")
echo ${#A[@]}
unzip "${A[@]}" # note the quotes