[英]RegEx Confusion in linux shell script
谁能解释一下这个在linux shell中的作用.....
port=$((${devpath##*[-.]} - 1))
我有一个名为$devpath
的变量,一个可能的值是/sys/bus/usb/devices/usb2/2-1
。
我假设$ {devpath ## * [ - 。]}在$ devpath上执行某种正则表达式,但这对我没有意义。 我理解的* [ - 。]也不是指“除了换行符之外的任何一个角色中的任何一个”或者任何其他角色“
当运行脚本(这是来自usb-devices.sh )时,似乎port的值始终是第一个数字。 令我困惑的其他东西是最后的'-1',不应该减少${devpath##*[-.]}
做的一个吗?
我尝试在shell表达式中查找正则表达式,但没有任何意义,也没有找到##
的解释。
鉴于变量:
r="/sys/bus/usb/devices/usb2/2-123.45"
echo ${r##*-}
返回123.45
, echo ${r##*[-.]}
返回45
。 你看到这里的模式了吗?
让我们再进一步:表达式${string##substring}
从$string
的前面剥离$substring
的最长匹配。
所以使用${r##*[-.]}
我们正在将$r
所有内容剥离到最后-
或者.
找到了。
然后, $(( ))
用于算术表达式。 因此,使用$(( $var - 1 ))
您将从${r##*[-.]}
的值中减去1
。
总而言之, port=$((${devpath##*[-.]} - 1))
意味着:在$port
存储最后一个数字的值-
或者.
在$devpath
。
按照下面的例子, echo $((${r##*[-.]} - 1))
返回44
(45 - 1)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.