我有一个字符串:dev/2.0
或dev/2.0-tymlez
。如何在bash中最后一个-
连字符后提取字符串?如果没有-
,则变量应为空,否则为tymlez
,我想将结果存储在$STRING
中。之后,我想用以下方法检查变量:
if [ -z "$STRING" ]
then
echo "\$STRING is empty"
else
echo "\$STRING is NOT empty"
fi
有可能吗?
答案 0 :(得分:1)
建议不要调用变量STRING
。所有大写变量都由系统(例如HOME
)或shell本身(例如PWD
,RANDOM
)使用。
也就是说,你可以做类似的事情
string='dev/2.0-tymlez'
case "$string" in
*-*) string="${string##*-}";;
*) string='';;
esac
这有点笨拙:它首先检查是否有-
,如果有,它会删除匹配*-
的最长前缀;否则,它将string
设置为空(因为*-
届时将不匹配任何内容)。
答案 1 :(得分:1)
您可以使用=~
运算符:
string="dev/2.0-tymlez"
[[ $string =~ -([^-]+)$ ]]; string=${BASH_REMATCH[1]}
BASH_REMATCH
是一个特殊的数组,其中[[ ... =~ ... ]]
中的匹配项被分配给该数组。
答案 2 :(得分:0)
您可以使用sed
:
for string in "dev/2.0" "dev/2.0-1-2-3" "dev/2.0-tymlez"; do
string=$(sed 's/[^-]*[-]*//' <<< "${string}")
echo "string=[${string}]"
done
结果
string=[]
string=[1-2-3]
string=[tymlez]