variable是变量bash的子字符串

时间:2014-05-17 22:00:55

标签: regex linux string bash

我试图查看用户输入的输入是否包含在以空格分隔的列表中。

interfaces=`ls /sys/class/net | awk '{ ORS=" "; print; }'`
# Loop until valid input for interface is received
while [[ -z "$interface" || ! "$interfaces" =~ "$interface" ]]
do
    echo -n "Select the interface ( "$interfaces"): "
    read interface
done

$ interfaces可能包含"eth0 lo wlan0 wlan1 "行的内容,我试图查看用户是否已输入该列表中的接口,如果没有告诉他们再次执行此操作。

我似乎无法弄清楚如何做到这一点。我尝试使用通配符和==运算符以及与=~匹配的正则表达式,但我没有多少运气。

是否有一种简单而干净的方法来检查用户输入的值是否在我创建的列表/字符串中?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

更新,感谢@thatotherguy和@rici的反馈: 修改后,我意识到我对引用=~右侧的表达有误解 - 见底部:

问题中的命令应该,但它与用户输入匹配列表的任何部分;这是一个匹配整个列表条目的用户输入的版本:

 while [[ -z $interface || ! " $interfaces " =~ " $interface " ]]

(顺便说一下:您可以考虑使用bash&#39; select命令而不是while循环,其中为用户提供编号选项并键入所需的< em> number 执行选择。)


重新引用=~的右侧(适用于bash 3.2或更高版本):

  • 任何引用的部分都被视为文字
  • 未加引号部分被视为正则表达式(即.*等字符具有特殊含义)

如果引用 整个右侧 - 如上面的解决方案 - =~有效执行文字子字符串匹配