在对awk的ssh远程调用中转义感叹号?

时间:2014-02-25 15:01:29

标签: ssh awk

我有这一行:

ssh server1 "df -h | sed 's/%/ /g' | awk '{ if (\$5 > 90 && !/^[a-zA-Z]/) { var1=1 }} END { if (var1 == 1) { print 1 } else { print 0 }}'"

但是,这会产生以下错误:

bash: !/^[a-zA-Z]/: event not found

我不太清楚如何逃避感叹号。有什么想法吗?

此致

大卫

1 个答案:

答案 0 :(得分:9)

Bash即使在双引号中也会评估!历史操作。如果你在引号内逃脱它,你就得到\!(严重的是,wtf bash?)。您必须结束双引号,添加'!'\!,然后重新打开双引号。

ssh server1 "df ... && "\!"/^[a-zA-Z]/...}}'"

对于记录,zsh正确处理双引号内的反斜杠转义("\!" - > !)。