假设我有一个变量foo,即:
foo=`echo ab cd ef gh`
Run Code Online (Sandbox Code Playgroud)
如果你echo foo,你会得到:
$ echo $foo
ab cd ef gh
Run Code Online (Sandbox Code Playgroud)
现在,我想ef从$foo. 最快的方法是什么?
您可以使用 shell 的模式替换来删除模式:
$ foo="ab cd ef gh"
$ echo "${foo//ef}"
ab cd gh
Run Code Online (Sandbox Code Playgroud)
许多人认为使用反引号是过时的。命令替换的常用现代形式是$(...).
使用反引号和 echo 来创建foo是多余的。您可以简单地将字符串分配给变量,如上所示。
只是为了让您知道发生了什么,当您使用 echo 而不使用将其参数放在引号中时,shell 会执行分词,将字符串分成三部分,将其echo作为三个单独的参数输入。echo用空格连接它的参数。
假设您的变量至少包含一个ef, POSIXly:
$ printf '%s\n' "${foo%ef*}${foo##*ef}"
ab cd gh
Run Code Online (Sandbox Code Playgroud)
在bash、ksh变体(排除posh)zsh和 中yash,您可以使用:
$ printf '%s\n' "${foo/ef}"
Run Code Online (Sandbox Code Playgroud)
删除第一次出现的ef,或"${foo//ef}"删除所有出现的。