什么时候@应该在bash中转义?

时间:2013-05-27 07:56:53

标签: linux bash

在下面的示例中,我看不到转义@有什么不同,我发现有点令人惊讶,因为它在Perl中是必需的。

在哪些情况下应该在bash中转义@

TYPE="snap"
zfsPath="tank/fs"

(
echo "tank/fs@snap1"
echo "tank/fs/fs2@snap2"
) | grep "$zfsPath\@${TYPE}"

1 个答案:

答案 0 :(得分:4)

在Perl中,必须转义@以防止双引号中的数组插值:

print "somebody@example.com"; # This would interpolate the array `@example`

在bash中,数组不由@sigil表示。因此,您不必在类似的上下文中反斜杠符号。 @在其他情境中的bash中很特别,如$@${array[@]},所以如果你想在字面上打印这样的字符串,你必须使用单引号(反斜杠@ does没有帮助),或者你必须反斜杠$

echo "\$@"
echo "\${array[2]}"