如何在Bash中通过SSH执行包含多重引号的Linux命令
SSH执行带多重引号命令的解决方案
多重单引号嵌套会导致Bash命令解析错误,可通过以下几种方法解决:
- 方法1:转义内层单引号
Bash单引号包裹的字符串内可通过'\''格式转义单引号,不会打断外层的单引号包裹,示例命令如下:
ssh -t node1 'free -m | awk '\''NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }'\'''
- 方法2:使用带引用的Here Document传递命令
直接将命令通过标准输入传给远端bash解析,完全规避引号嵌套冲突。给EOF加单引号可以避免本地提前展开变量、特殊符号,命令会原样传递到远端执行:
ssh -t node1 bash << 'EOF' free -m | awk 'NR==2{printf "Memory Usage: %s/%sMB (%.2f%%)\n", $3,$2,$3*100/$2 }' EOF
- 方法3:替换awk外层引号并转义特殊字符
将awk的外层单引号替换为双引号,同时转义内部的双引号和$符号,避免本地提前解析:
ssh -t node1 "free -m | awk \"NR==2{printf \\\"Memory Usage: %s/%sMB (%.2f%%)\\n\\\", \\\$3,\\\$2,\\\$3*100/\\\$2 }\""
该方法转义层级多易出错,更推荐前两种方案。
内容的提问来源于stack exchange,提问作者Eular
相关产品推荐
相关产品推荐

