아카이브에 모든 파일이 포함되어 있는지 테스트하려고 합니다. 내가 해야 할 일은 단순히 압축을 풀고 만드는 것뿐이었습니다. 쉘은 -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