Zenity - 带字符串变量的文本

时间:2016-01-04 19:05:08

标签: linux bash

我想知道如何将包含空格的字符串传递给Zenity作为文本参数,因为我当前的方法是截断/无法评估第一个空格后的所有文本。

这是一个显示问题的MVP:

脚本

#!/bin/bash

a="test test test"
test_func() {
  echo "$@"
  $(zenity --info --text "test test")
  $(zenity --info --text "$@")
}

test_func ${a}

输出

$> test test test
$> (zenity info window with test test as text)
$> (zenity info window with test) *** should contain "test test test"

1 个答案:

答案 0 :(得分:1)

使用"$*"代替"$@"

"$@"手册(强调我的):

  

从一个开始扩展到位置参数。 当扩展发生在双引号内时,每个参数都会扩展为单独的单词。也就是说,“$ @”相当于“$ 1”“$ 2”...如果双引号扩展出现在一个单词中,则第一个参数的扩展与原始单词的开头部分相连,并且最后一个参数的扩展与原始单词的最后一部分连接在一起。当没有位置参数时,“$ @”和$ @展开为空(即,它们被删除)。

对于"$*"

  

从一个开始扩展到位置参数。当扩展不在双引号内时,每个位置参数都会扩展为单独的单词。在执行它的上下文中,这些单词受到进一步的单词拆分和路径名扩展的影响。当扩展发生在双引号内时,它会扩展为单个单词,每个参数的值由IFS特殊变量的第一个字符分隔。也就是说,“$ *”相当于“$ 1c $ 2c ...”,其中c是IFS变量值的第一个字符。如果未设置IFS,则参数由空格分隔。如果IFS为null,则连接参数时不会插入分隔符。

或者,您可以引用${a}a作为单个参数传递,而不是分隔空格。