为什么在我的shell脚本中忽略了我的引号

时间:2013-01-22 22:33:03

标签: shell scripting freebsd

我正在尝试在FreeBSD中的/ bin / sh中编写一个安装shell脚本。

  

DialogOptions =' - trim --ok-label“Next”--backtitle“Workstation Installer”'

     

对话框$ DialogOptions --max-input 4 --cancel-label“Abort”--inputbox“输入内容”

以上退出时出现错误

  

错误:未知选项安装程序。

我认为当我将DialogOptions变量传递给对话框时,它会以不同的方式解释引号。我不知道为什么会这样。

我也注意到ok标签显示“Next”而不是Next。

2 个答案:

答案 0 :(得分:1)

shell 而言,它应该完全符合您的预期:

$ DialogOptions='--trim --ok-label "Next" --backtitle "Workstation Installer"'

此时,变量“DialogOptions”包含单个字符串

$ echo ..$DialogOptions..
..--trim --ok-label "Next" --backtitle "Workstation Installer"..

echo命令看到五个参数: - trim, - ok-label,“Next”--backtitle和“Workstation Installer”

答案 1 :(得分:0)

要做你想做的事,你需要使用一个数组,这将保持你引用的参数不分裂:

DialogOptions=(--trim --ok-label "Next" --backtitle "Workstation Installer")
dialog "${DialogOptions[@]}" --max-input 4 --cancel-label "Abort" --inputbox "Enter stuff"

您还需要使用支持数组的shell:bash / ksh / zsh。如果做不到这一点,你必须使用eval

DialogOptions='--trim --ok-label Next --backtitle "Workstation Installer"'
eval "dialog $DialogOptions --max-input 4 --cancel-label Abort --inputbox \"Enter stuff\""

请注意, 不引用$IFS

中不包含任何字符的字符串
相关问题