鉴于此Bash代码:
TEMP="1_2"
echo ${TEMP/_.*/}
Run Code Online (Sandbox Code Playgroud)
为什么打印出来1_2而不是1?
我也试过这些,但它们不起作用:
echo ${TEMP/_\.*/}
echo ${TEMP/_\\.*/}
Run Code Online (Sandbox Code Playgroud)
这确实有效:
echo ${TEMP/_[0-9]*/}
Run Code Online (Sandbox Code Playgroud)
但我想知道:
问号是单字符通配符.但是,它不像星号是量词的正则表达式那样工作.在Bash中,在参数扩展中,星号是多字符通配符.
$ temp=1_2
$ echo "${temp/_*}"
1
Run Code Online (Sandbox Code Playgroud)
以下也适用于这种特殊情况.参见参数扩展中man bash的有关差异的详细信息.
echo "${temp%_*}"
echo "${temp%%_*}"
Run Code Online (Sandbox Code Playgroud)
我建议不要使用all-caps变量名,以减少名称与shell或环境变量冲突的可能性.
| 归档时间: |
|
| 查看次数: |
241 次 |
| 最近记录: |