在Shell脚本的SED字符串中,美元符号@ $ VAR之前的at符号是什么?

时间:2018-05-25 09:12:25

标签: shell sed

@$VAR在壳牌中意味着什么?在这种情况下,我无法使用@

我在处理dotfiles repo时遇到了以下shell文件

#!/usr/bin/env bash

KEY="$1"
VALUE="$2"
FILE="$3"

touch "$FILE"

if grep -q "$1=" "$FILE"; then
  sed "s@$KEY=.*@$KEY=\"$VALUE\"@" -i "$FILE"
else
  echo "export $KEY=\"$VALUE\"" >> "$FILE"
fi

我正在努力理解sed "s@$KEY=.*@$KEY=\"$VALUE\"@" -i "$FILE"行,特别是使用@

2 个答案:

答案 0 :(得分:2)

使用sed时,您不一定要使用/字符作为substitute操作的分隔符。

因此,@%字符也可以替代使用:

echo A | sed s/A/B/
echo A | sed s@A@B@
echo A | sed s%A%B%

答案 1 :(得分:1)

在命令

sed "s@$KEY=.*@$KEY=\"$VALUE\"@" -i "$FILE"

字符@用作s sed命令中的分隔符。 s(替换)命令的一般形式是

s<delim><searchPattern><delim><replaceString><delim>[<flags>]

最常用的&lt; delim&gt;是/,但有时会使用其他字符,尤其是当&lt; searchPattern&gt;或&lt; replaceString&gt;包含(或可能包含)斜杠。