我需要awk
用不同的情况替换脚本中的一部分命令,如下所示:
CONTAINER=$1
RESULTS=$(ssh -o LogLevel=QUIET -t -i ~/key.pem user@server sudo docker stats --no-stream $CONTAINER | awk '{if (NR!=1) {print substr($2, 1, length($2)-1)}}')
Run Code Online (Sandbox Code Playgroud)
对此:
#!/bin/bash
CONTAINER=$1
TYPE=$2
case "${TYPE}" in
cpu)
AWK="'{if (NR!=1) {print substr($2, 1, length($2)-1)}}'"
;;
esac
RESULTS=$(ssh -o LogLevel=QUIET -t -i ~/key.pem user@server sudo docker stats --no-stream $CONTAINER | awk $AWK)
Run Code Online (Sandbox Code Playgroud)
但我总是收到语法错误。
在变量声明中,里面的任何东西(除了参数/命令/算术扩展)"
都是按字面处理的,所以当你这样做时:
var="'foobar'"
Run Code Online (Sandbox Code Playgroud)
$var
将扩展为'foobar'
,而不是foobar
。
所以你需要:
AWK='{if (NR!=1) {print substr($2, 1, length($2)-1)}}'
Run Code Online (Sandbox Code Playgroud)
由于您不需要 shell 进行任何预扩展,因此最好使用单引号以保持安全。如果您使用双引号,则 eg$2
将被 shell 预先扩展为参数扩展,这对于 shell 特殊的任何其他标记都是正确的。
并且$AWK
在使用它禁用 split+glob 运算符时不要忘记引用:
… | awk "$AWK"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
577 次 |
最近记录: |