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

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

假设我有一个变量foo,即:

foo=`echo ab cd ef gh`

如果你echo foo,你会得到:

$ echo $foo
ab cd ef gh

现在,我想ef$foo.最快的方法是什么?

答案1

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

$ printf '%s\n' "${foo%ef*}${foo##*ef}" 
ab cd  gh

bashksh变体(不包括poshzsh和中yash,您可以使用:

$ printf '%s\n' "${foo/ef}"

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

答案2

您可以使用外壳的模式替换删除图案:

$ foo="ab cd ef gh"
$ echo "${foo//ef}"
ab cd  gh

笔记

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

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

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

答案3

这是两种方法...

uc@SVE1411EGXB:~/shop_app/depot2$ foo=`echo ab cd ef gh`
uc@SVE1411EGXB:~/shop_app/depot2$ echo ${foo/ef} 
ab cd gh

或者使用流编辑器 AKA sed.. 搜索"ef"并替换为空。

uc@SVE1411EGXB:~/shop_app/depot2$ echo $foo | sed 's/ef//g'
    ab cd  gh

相关内容