鉴于此Bash代码:
TEMP="1_2"
echo ${TEMP/_.*/}
为什么打印出1_2
而不是1
?
我也试过这些,但他们不能工作:
echo ${TEMP/_\.*/}
echo ${TEMP/_\\.*/}
这确实有效:
echo ${TEMP/_[0-9]*/}
但我想知道:
答案 0 :(得分:5)
问号是单字符通配符。但是,它不像星号是量词的正则表达式那样工作。在Bash中,在参数扩展中,星号是多字符通配符。
$ temp=1_2
$ echo "${temp/_*}"
1
以下内容也适用于此特定情况。有关差异的详情,请参阅man bash
中的Parameter Expansion。
echo "${temp%_*}"
echo "${temp%%_*}"
我建议不要使用all-caps变量名,以减少名称与shell或环境变量冲突的可能性。