我真的把我的头发拉出来。 我刚开始使用一些bash脚本,我正在尝试创build一个简单的脚本,它使用一些对话框给我一个快速的方法来做一个svn结帐。 它工作的很好,直到我想服务一个radiolist与多个选项,当你进入你的项目结账时提取。
代码的最后一部分是失败的:
if [ $MATCHFOUND = true ]; then echo 'Exact match found do checkout' else if [ ${#repoar[@]} == 0 ]; then whiptail --title "Error" \ --msgbox "No matches found for [$PROJECT]" 8 78 ./dialog.sh else for ((i=0; i<${#repoar[@]}; i++)) do RADIOLIST=$RADIOLIST" \"$i\" \"${repoar[$i]}\" \"OFF\"" done let ARLENGTH=${#repoar[@]} whiptail --radiolist "Projects found" 20 78 $ARLENGTH "$RADIOLIST" fi fi
$ RADIOLIST的例子
"0" "test" "OFF" "1" " test 5" "OFF" "2" " test2" "OFF" "3" " test3" "OFF" "4" " test4" "OFF"
当我将variables作为参数参数添加时,Radiolist参数似乎没有像它们应该被转义一样。 当我复制过去的例子使用whiptail命令它工作正常。
在取代variables之前,引号会被解释,因此将引号embedded到variables值中并没有什么用处。 如果我明白你想要做的事情,最简单的方法就是使用RADIOLIST的数组:
RADIOLIST=() for ((i=0; i<${#repoar[@]}; i++)) do RADIOLIST+=("$i" "${repoar[$i]}" "OFF") done let ARLENGTH=${#repoar[@]} whiptail --radiolist "Projects found" 20 78 $ARLENGTH "${RADIOLIST[@]}"
看起来你需要改变
RADIOLIST=$RADIOLIST" \"$i\" \"${repoar[$i]}\" \"OFF\""
至
RADIOLIST=$RADIOLIST" \\\"$i\\\" \\\"${repoar[$i]}\\\" \\\"OFF\\\""
这将在生成的输出中的每个"之前插入一个\ ,导致在几行后面的whiptail调用期望的转义。