这个命令对 sed 's/~/ /g' 有什么作用?

Dig*_*aul -3 linux sed

我最初将一组 6 个参数传递给脚本。

Script.sh a b c d e f
Run Code Online (Sandbox Code Playgroud)

脚本中管理参数的命令之一;

comm=$(echo $1 |sed 's/~/ /g')
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 10

sed表达式s/~/ /g用空格字符替换每个波浪号。它的字面意思是“在~全局范围内(在整个输入行上)用空格替换与正则表达式匹配的所有内容”。在这种情况下,表达式也可以写为更快y/~/ /,整个sed命令可以替换为更快tr '~' ' '

bash,这可以更有效地完成

comm=${1//\~/ }
Run Code Online (Sandbox Code Playgroud)

~来转义或引用在这里不被扩展为当前用户的主目录的路径名。

在任何情况下,$1如果您使用它,则需要双引号echo(除非您希望将 shell glob 扩展为文件名),并且理想情况下,该命令将使用printf(这避免了初始破折号$1被解释为开始一些选项echo,并避免在某些情况下解释某些反斜杠序列):

comm=$( printf '%s\n' "$1" | tr '~' ' ' )
Run Code Online (Sandbox Code Playgroud)

有关的: