bash变量的Linux whiptail/dialog参数出错

bash变量的Linux whiptail/dialog参数出错,bash,shell,dialog,whiptail,Bash,Shell,Dialog,Whiptail,有人能解释一下为什么下面的代码不起作用吗?我要发疯了,想找出答案 #!/bin/bash TEST="M1 \"1-wire Interface\" ON" echo $TEST RESULT=$(dialog --title "Config Modules State" --checklist "Choose modules to activate" 20 50 1 $TEST) 它会在输出端打印此内容,正如预期的那样: M1“单线接口”打开 “dialog”给出一个错误,说明: 错误:应

有人能解释一下为什么下面的代码不起作用吗?我要发疯了,想找出答案

#!/bin/bash

TEST="M1 \"1-wire Interface\" ON"
echo $TEST
RESULT=$(dialog --title "Config Modules State" --checklist "Choose modules to activate" 20 50 1 $TEST)
它会在输出端打印此内容,正如预期的那样:

M1“单线接口”打开

“dialog”给出一个错误,说明:

错误:应为3个参数,但仅找到1个

“whiptail”没有给出任何错误,只是列出了它的选项

如果我将它打印的字符串复制并粘贴到命令行上,它可以工作:

对话框--标题“配置模块状态”--检查表“选择要激活的模块”上的“20 50 1 M1”单线接口

同时使用“对话”和“鞭子”。 发生了什么事

系统:

  • Linux raspberrypi 3.18.11+#781抢占
  • 鞭梢(牛顿):0.52.14
  • 对话版本:1.1-20120215

如果有人遇到这个问题,请从评论中找到答案

TEST=(M1 '1-wire Interface' ON)
TEST=( "${TEST[@]}" M2 'Other Interface' OFF )
echo ${TEST[@]}
dialog --title "Config Modules State" --checklist "Choose modules to activate" 20 50 2 "${TEST[@]}"

在包含分配给
结果
的行中,
测试
变量会进行分词,产生四个参数传递给对话框:(1)
M1
(2)
“1-wire
(3)
接口”
(4)
。那很可能不是你想要的为什么会分开?双引号不应该把它作为一个参数,就像我在提示符处直接键入的一样吗?我不明白。标题也有空格,用引号括起来。那为什么不分开呢?更重要的是,我如何解决这个问题?好的,参考你的链接,我把它转换成一个数组。但是,如果我向数组中添加元素(因为数据是动态的,所以我需要添加元素),它仍然不起作用。示例:
#/bin/bash;测试=(M1“1线接口”打开);测试=(${TEST[@]}M1“单线接口”打开);echo${TEST[@]};结果=$(对话框--标题为“配置模块状态”--检查表“选择要激活的模块”20 50 2“${TEST[@]}”)
这仅在注释掉第二个数组附加行时有效。在本例中,如何将动态数据数组传递给dialog/whiptail?(很抱歉,我似乎无法在此处编写代码块)
${TEST[@]}
在扩展数组时也必须被引用。运行脚本。单引号分隔了被视为一个参数的内容。看到区别了吗?主持人拒绝对上述答案进行更正,这不是100%准确。编辑如下:如果变量作为多个参数传递给一个命令,就像参数包含空格一样,整个参数必须用单引号括起来,而不是双引号(正如上面@Diego所指出的。因此,将其更改为:
TEST=(M1'1-wire Interface'ON)
TEST=(“${TEST[@]}”M2‘其他接口’关闭)
在这种情况下有什么区别?正如@Diegio提到的,重要的部分是引用了
${TEST[@]}