我有一个var,它可以在之前和/或之后有单引号或空格:
var="' /path/to/somewhere '"
var=" /path/to/somewhere "#<- here is a space at the end
var="/path/to/somewhere'"
var=" /path/to/somewhere '"
我需要使用bash rematch的regexp来清除可能的单引号或前后空格
我知道可以这样做:
var=${var##+([ \'])}
var=${var%%+([ \'])}
但我需要用BASH_REMATCH(长期解释xd)。我正在尝试:
[[ ${var} =~ ^([\' ]*)?(.+)([\' ])?$ ]] && var="${BASH_REMATCH[1]}"
但它不起作用。可能。+正在获得其余的字符串。我怎样才能得到有趣的部分?感谢。
答案 0 :(得分:2)
你的示例中的.+
是导致问题的原因,因为它是贪婪的,所以它将消耗该行的其余部分。
在这种情况下,您可以通过要求中间部分以空格或'
以外的其他内容结束来阻止它这样做:
re='^[ '"'"']*(.*[^ '"'"'])[ '"'"']*$'
[[ $var =~ $re ]] && echo "${BASH_REMATCH[1]}"
在单引号字符串中插入文字'"'"'
需要看起来很讨厌的'
。在bash中使用正则表达式时,推荐的方法是使用单引号定义包含模式的变量,然后使用它,不带引号(此方法适用于支持正则表达式的所有bash版本)。