bash:如何在select中使用带引号的参数


0

从一个命令我得到一些参数,我想在shell脚本中使用bash中的select语句向用户提供。命令提供的参数可能包含空格,因此受引号保护。这是一个简化的例子。

这按预期工作:

select opt in a b "c d"
do
  echo $opt
  break
done

输出如预期:

1) a
2) b
3) c d
#? 

但是使用变量中的命令输出它不能按预期工作:

opts="a b \"c d\""
select opt in $opts
do
  echo $opt
  break
done

虽然$ opts包含与第一个选择示例中的硬编码类型相同的输出,但输出是不同的:

1) a
2) b
3) "c
4) d"
#?

所以不是bash消耗了报价。它们被保留,但引号不会像我们硬编码时那样封装参数。正如我已经写过的那样,我将参数作为命令的输出。它们可能包含空格,因此已经被引号保护。如何将它们整合到“选择”语句中?它不是关于单引号和双引号。使用单引号也会发生同样的情况:

1) a
2) b
3) 'c
4) d'
#?

Answers:


0

此解决方案可以帮助您:

#!/bin/bash

opts=(a b "c d");

select opt in "${opts[@]}"
   do echo $opt; 
   break; 
done

是的,这很有效。谢谢。我现在正在努力将命令的输出一分为$ opts。此外,它甚至在引号之间的空格处被分成数组元素。
马库斯2014年

0

使用数组:

opts=("a" "b" "c d");select opt in "${opts[@]}"; do echo $opt; break; done

是的,这很有效。谢谢。它与@podwysoc
Markus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.