繁体   English   中英

variable是变量bash的子字符串

[英]variable is a substring of variable 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 " ,我试图查看用户是否输入了该列表中的接口,如果没有告诉他们再做一次。

我似乎不知道该怎么做。 我尝试使用通配符和==运算符以及与=~匹配的正则表达式,但是运气不高。

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

谢谢你的帮助!

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

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

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

(顺便说一句:您可以考虑使用bashselect命令而不是while循环,在该循环中,为用户提供了编号选择,然后键入所需的数字即可执行选择。)


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

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

如果整个右手都用引号引起来 -如上述解决方案中的- =~有效执行文字子串匹配

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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