无法将双引号传递给对话框

无法将双引号传递给对话框

我正在编写一个用于自动录音的脚本,使用“dialog”命令创建一个交互式菜单来适当地命名频道。我有一个数组中的频道名称列表。我希望表单本身为空白,但我似乎无法将正确的参数传递给 dialog。

如果我转义引号,表单会按预期显示,但引号会出现在输入区域中;如果我不转义引号,则会导致乱码;如果我将命令回显到另一个文件并执行它,它会完全按照我想要的方式运行。我需要帮助弄清楚如何让对话框以这种方式执行。

这是代码:

#!/bin/bash
declare -a CHANNELS
CHANNELS=(meet george jetson his boy elroy daughter judy)

channameiter ()
{
        for i in ${!CHANNELS[@]};
        do
                echo  -e "${CHANNELS[$i]}:" $((i + 1)) 1 \'\' $((i + 1)) 25 30 30 \
        done
}

dialog --form "Channels" 30 60 16 `channameiter`

这是回显到另一个文件的代码,然后执行,可以正确运行。

dialog --form Channels 30 60 16 meet: 1 1 "" 1 25 30 30 george: 2 1 "" 2 25 30 30 jetson: 3 1 "" 3 25 30 30 his: 4 1 "" 4 25 30 30 boy: 5 1 "" 5 25 30 30 elroy: 6 1 "" 6 25 30 30 daughter: 7 1 "" 7 25 30 30 judy: 8 1 "" 8 25 30 30

有任何想法吗?

答案1

以下是实现此目的的一种方法,其中命令行参数数组是迭代构建的:

#!/bin/bash
args=(Channels 30 60 16)
i=0
for chan in meet george jetson his boy elroy daughter judy; do
   ((++i))
   args+=("$chan" $i 1 "" $i 25 30 30)
done
dialog --form "${args[@]}"

当然,这可以使用CHANNELS与原始方法相同的数组和迭代技术。(就我个人而言,我认为我会将频道名称从命令行选项带到脚本中,在这种情况下,您只需编写即可for chan; do。)

相关内容