我正在尝试在 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 *)
此外,我预计下面的 shell 通配符扩展不会发生。
$ echo replace | sed s/replace/*/
*
但是,这行得通。
$ echo replace | sed s/replace/$(echo *)/
qwe