如何以数组形式提供命令参数?

如何以数组形式提供命令参数?

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

相关内容