繁体   English   中英

变量作为多个命令参数忽略 Bash 中的引号

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM