Tfb*_*fb9 1 command-line bash zenity
我正在尝试构建一个 zenity 接口,调用位于特定文件夹中的一堆脚本中的一个。为此,我依靠zenity --list. 我希望列表有两列:1) 脚本文件名和 2) 描述文本 [来自第三行的注释,在脚本文件本身内]。
我可以为仅文件名的界面制作单列,没有问题。当我希望使用第二列进行描述时,这里的问题就出现了,试图模仿以下示例:
zenity --list \
--title="Choisissez les bogues à afficher" \
--column="N° de bogue" --column="Gravité" --column="Description" \
992383 Normal "GtkTreeView plante lors de sélections multiples" \
293823 Grave "Le dictionnaire GNOME ne prend pas de proxy en charge" \
393823 Critique "L'édition de menu ne fonctionne pas avec GNOME 2.0"
Run Code Online (Sandbox Code Playgroud)
更简单地说,我想从终端了解为什么以下两组命令没有提供类似的结果:
$ zenity --list --title="Choose script" --column="Script" --column="Description" a.sh "chaise longue" b.sh "moineau"
Run Code Online (Sandbox Code Playgroud)
和
$ TESTSTRING='a.sh "chaise longue" b.sh "moineau"'
$ echo $TESTSTRING
a.sh "chaise longue" b.sh "moineau"
$ zenity --list --title="Choose script" --column="Script" --column="Description" $TESTSTRING
Run Code Online (Sandbox Code Playgroud)
带引号的字符串中的引号与进行字段拆分的 shell 无关。他们就像任何其他角色一样。因此,当您使用$TESTSTRING代替时"$TESTSTRING",引号内的 - 周围chaise longue和moineau-不会阻止字段拆分:
$ TESTSTRING='a.sh "chaise longue" b.sh "moineau"'
$ printf "%s\n" $TESTSTRING
a.sh
"chaise
longue"
b.sh
"moineau"
Run Code Online (Sandbox Code Playgroud)
如果要保留所需的拆分,请使用数组:
$ TESTSTRING=(a.sh "chaise longue" b.sh "moineau")
$ printf "%s\n" "${TESTSTRING[@]}"
a.sh
chaise longue
b.sh
moineau
Run Code Online (Sandbox Code Playgroud)