我正在尝试测试存档是否包含所有文件。我需要做的就是简单的解压然后制作。 shell 不断尝试-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