1
#!/bin/bash

array=$(yad \
--separator="\n" \
--form \
--field="Number":NUM 1 \
--field="Text":TEXT \
--button="b1:1" \
--button="b2:2" \
--button="b3:3" )
echo $?
echo "${array[@]}"

b1b3时,数组为空。为什么?如何修改它以始终获得数组中NUM - 和TEXT -form-field 的答案以及按钮编号为$??

4

1 回答 1

1

从手册页:

用户指定按钮的退出代码必须在命令行中指定。
偶数退出码意味着打印结果,奇数只返回退出码。

因此,您甚至需要为按钮使用退出代码


编辑:

我一直在寻找一种将' 的输出稳健地加载到 bash 数组中的方法,但该选项似乎不支持. 但是,您可以使用 for shell :yad--separatornull byte--quoted-outputeval

quoted_input=$(
    yad --quoted-output \
        --separator=' ' \
        --form \
        --field='Number':NUM 1 \
        --field='Text':TEXT \
        --button='b1':10 \
        --button='b2':20 \
        --button='b3':30 \
    echo $?
)
eval "array=( $quoted_input )"

该范围内的任何字符都不会[0x01-0x7f]破坏它,因此它应该是安全的,但使用它需要您自担风险。

于 2021-12-13T21:39:12.740 回答