[英]Variable as multiple command parameters ignore quotes in Bash
我想将一个变量(基本上是一个读取文本文件)作为多个参数插入到命令正文中,但这不起作用,因为该变量没有正确解析。
我的变量
MAIN_MENU="1 'Create new image' 2 'Start image as overriding' 3 'Start image as snapshot' 4 'Install OS' 5 'Settings'"
回声:
echo $MAIN_MENU
1 'Create_new_image' 2 'Start_image _as_overriding' 3 'Start _image_as_snapshot' 4 'Install_OS' 5 'Settings'
这是我所期望的,如果我将回声结果(手动)复制粘贴到如下所示的命令参数中,它就可以工作。
dialog --title "Title" --menu 'Choose operation:' 0 0 5 1 'Create new image' 2 'Start image as overriding' 3 'Start image as snapshot' 4 'Install OS' 5 'Settings'
在这种情况下,参数是... 1; 创建新形象; 2; 开始图像作为覆盖...
但是,当我将参数作为变量插入时,它完全忽略了单引号。
MAIN_MENU="1 'Create new image' 2 'Start image as overriding' 3 'Start image as snapshot' 4 'Install OS' 5 'Settings'"
dialog --title "Title" --menu 'Choose operation:' 0 0 5 $MAIN_MENU
基本上在那里留下单引号,但也用空格分隔参数..
在这种情况下,参数是... 1; '创建; 新的; 图片'; 2; '开始; 图片; 作为; 覆盖'; ...
没有多少报价交换给我带来了令人垂涎的结果。
参数扩展后,结果中的任何引号都被视为文字字符,而不是用于转义空格的语法。 创建值列表的正确方法是使用数组,它充当第二层引用以允许每个元素中有空格。 作为奖励,数组分配还允许更易读的格式。
MAIN_MENU=(
1 'Create new image' # Comments can be added, as well
2 'Start image as overriding'
3 'Start image as snapshot'
4 'Install OS'
5 'Settings'
)
dialog --title "Title" --menu 'Choose operation:' 0 0 5 "${MAIN_MENU[@]}"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.