我在 Python 中使用这个命令时遇到了问题。
stress-ng --vm-bytes $(awk '/MemAvailable/{printf "%d\n", $2 * 0.95;}' < /proc/meminfo)k --vm-keep -m 1
我需要在命令的开头和结尾加上双引号,例如:
"stress-ng --vm-bytes $(awk '/MemAvailable/{printf "%d\n", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1"
转义内部引号后,出现意外的字符串结尾。
"stress-ng --vm-bytes $(awk '/MemAvailable/{printf \"%d\n\", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1"
有谁知道如何处理这个问题?
答案1
字符串的第 52-59 个字符,
"stress-ng --vm-bytes $(awk '/MemAvailable/{printf \"%d\n\", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1"
↑↑↑↑↑↑↑↑
上面突出显示,下面单独显示:
\ " % d \ n \ "
被解析为:
"
(引号字符(已转义))%
d
- (换行符,十六进制 0x0A)
"
结果 shell 看到两行:
stress-ng --vm-bytes $(awk '/MemAvailable/{printf "%d
", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1
所以awk
看到下面的两行程序:
/MemAvailable/{printf "%d
", $2 * 0.9;}
awk 一次解析其程序一行(除非您使用反斜杠+换行符),因此它会看到不平衡的引号。如你所知,你想通过
/MemAvailable/{printf "%d\n", $2 * 0.9;}
到awk
;即,让我们awk
看到\n
字符而不是实际的换行符。所以你需要逃避\
你的\n
:
“stress-ng --vm-bytes $(awk '/MemAvailable/{printf \"%d\\n\", $2 * 0.9;}' < /proc/meminfo)k --vm-keep -m 1" ↑
顺便说一句,您的第一个命令使用 0.95,但随后您在接下来的两行中将其更改为 0.9。