使用符合 POSIX 的 sed 修改 shell 变量

Modify shell variables using sed with POSIX compliance

我有这个 shell 变量:

#!/bin/sh
namelist="John Doe
Josh Franklin
John Adams
"

要删除包含“John”的行,我使用:

namelist=$(sed '/John/d' <<< "$namelist")

但是,在从名为 Shellcheck,

的网站检查 POSIX 兼容性后

它说

In POSIX sh, here-strings are undefined.

那么使用 sed 修改变量的 POSIX 兼容方式是什么?

试试这个

namelist="John Doe
Josh Franklin
John Adams
"
namelist=$(IFS=$'\n';for name in ${namelist}; do echo ${name} | grep -v "John"; done)

echo "${namelist}"

您也可以使用 sed 获得类似的输出

namelist="John Doe
Josh Franklin
John Adams
"
namelist=$(IFS=$'\n';for name in ${namelist}; do echo ${name} | sed '/John/d'; done)

echo "${namelist}"

what would be the POSIX compliant way of modifying a variable using sed?

只是不要使用<<<,只是将它输出到sed。

 namelist=$(printf "%s\n" "$namelist" | sed '/John/d')