EAG*_*G08 8 bash wildcards conditional-statements
试图让一个变量遇到一个长度不同的文本字符串。字符串中重要的部分是前几个字符。
var1=hello
if [ $var1 == hello ]; then
echo success
fi
Run Code Online (Sandbox Code Playgroud)
或者
var1=hello
if [ $var1 == h*o ]; then
echo success
fi
Run Code Online (Sandbox Code Playgroud)
输出:成功
但由于我关心前 3 个字符左右,这听起来合乎逻辑,但不起作用:
var1=hello
if [ $var1 == hel* ]; then
echo success
fi
Run Code Online (Sandbox Code Playgroud)
输出:-bash: [: 参数太多
由于我只关心前几个字符,我可以这样做:
var1=hello
if [ ${var1:0:3} == hel ]; then
echo success
fi
Run Code Online (Sandbox Code Playgroud)
那会起作用,但我正在寻找解释为什么我会收到该错误以及可能的更好的书面解决方案。
Pau*_*aul 11
当您*在if类似的情况下使用时,它会进行文件名扩展。所以在第一种情况下,h*o可能与您当前目录中的文件匹配,因此测试通过。
将hel*匹配到几个文件,所以成为了太多的参数if命令。
尝试使用 if [[ $var1 == hel* ]]; then
双括号将测试转换为正则表达式,*通配符将按您的预期工作。
| 归档时间: |
|
| 查看次数: |
23963 次 |
| 最近记录: |