bash - 为什么有和没有 * 在 Bash 中有所不同
问题描述
[更新]
我正在尝试找出参数替换,尤其是关于${var#Pattern}
and ${var##Pattern}
。
根据文档:
${var#Pattern} 从 $var 中删除 $Pattern 中与 $var 前端匹配的最短部分。
${var##Pattern} 从 $var 中删除 $Pattern 中与 $var 前端匹配的最长部分。
现在,当我运行以下命令时,我预计第三个和第四个将是相同的,但事实并非如此。
我预计第四个输出是o Hello World!
.
为什么?
*
与第一个和第二个示例相比,这种情况下的效果如何?
#!/usr/bin/env bash
myString="Hello Hello World!"
ll="ll"
Hel="Hel"
echo "${myString#*$Hel}" # lo Hello World!
echo "${myString#$Hel}" # lo Hello World!
echo
echo "${myString#*$ll}" # o Hello World!
echo "${myString#$ll}" # Hello Hello World!
输出:
lo Hello World!
lo Hello World!
o Hello World!
Hello Hello World!
解决方案
${myString#$ll}
, 等价于,在 的开头${myString#ll}
删除,但不在 开头,因此没有效果。ll
myString
myString
ll
另一方面,${myString#*$ll}
允许通配符*
匹配He
并且$ll
将(显然)匹配ll
。
推荐阅读
- java - 在创建 Java 数组时使用尖括号和方括号方法的区别
- c# - 正则表达式删除字符并在数字之间进行选择
- android - CardView 高程阴影不居中?
- javascript - 如何使用 NodeJS 将文本转换为 JSON?
- python - 为什么在不同的 IDLE 中使用 \r 转义序列得到不同的输出?
- mongodb - 在 Mongo 上插入/更新聚合数据
- php - Laravel barryvdh/laravel-dompdf 安装错误
- javascript - 为什么我的脚本标签中的 Javascript 不起作用?
- vue.js - Nuxt.js npm run generate 后找不到文件
- visual-studio-code - phtml 文件中的 HTML 支持