作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 sed 中使用 shell 通配符。以下失败。 (我希望 foo
作为输出。)
$ touch foo
$ ls
foo
$ echo *
foo
$ bar=*
$ echo $bar
foo
$ echo "$bar"
*
$ echo replace | sed "s/replace/${bar}/"
*
$ echo replace | sed "s/replace/"${bar}"/"
*
foo
, 自
${bar}
被(双)引用。但是,我希望最后一个命令可以扩展通配符。
bar=$(echo *)
$ echo replace | sed s/replace/*/
*
$ echo replace | sed s/replace/$(echo *)/
qwe
最佳答案
您的最后一个命令确实尝试扩展通配符,但它失败了。来自 man bash
:
Pathname Expansion
After word splitting, unless the -f option has been set, bash
scans each word for the characters *, ?, and [. If one of these
characters appears, then the word is regarded as a pattern, and
replaced with an alphabetically sorted list of file names matching
the pattern.
*
的单词。到匹配的文件名。在您的情况下,它尝试扩展为以
s/replace/
开头的文件名。并且没有这样的文件。为了证明这一点:
$ echo "aaaa" | sed "s@a@*@g"
****
$ echo "aaaa" | sed "s@a@"*"@g"
****
$ touch s@a@b@g
$ echo "aaaa" | sed "s@a@*@g"
****
$ echo "aaaa" | sed "s@a@"*"@g"
bbbb
关于bash - 如何在 sed 中使用 shell 通配符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19476560/
我是一名优秀的程序员,十分优秀!