使用符合 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')
我有这个 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')