删除变量中字符串的最快方法

rne*_*s12 0 shell bash

假设我有一个变量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. 最快的方法是什么?

Joh*_*024 5

您可以使用 shell 的模式替换来删除模式:

$ foo="ab cd ef gh"
$ echo "${foo//ef}"
ab cd  gh
Run Code Online (Sandbox Code Playgroud)

笔记

  1. 许多人认为使用反引号是过时的。命令替换的常用现代形式是$(...).

  2. 使用反引号和 echo 来创建foo是多余的。您可以简单地将字符串分配给变量,如上所示。

  3. 只是为了让您知道发生了什么,当您使用 echo 而不使用将其参数放在引号中时,shell 会执行分,将字符串分成三部分,将其echo作为三个单独的参数输入。echo用空格连接它的参数。


cuo*_*glm 5

假设您的变量至少包含一个ef, POSIXly:

$ printf '%s\n' "${foo%ef*}${foo##*ef}" 
ab cd  gh
Run Code Online (Sandbox Code Playgroud)

bashksh变体(排除poshzsh和 中yash,您可以使用:

$ printf '%s\n' "${foo/ef}"
Run Code Online (Sandbox Code Playgroud)

删除第一次出现的ef,或"${foo//ef}"删除所有出现的。