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)}}')
これに関して:
#!/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)
ところで、構文エラーが引き続き発生します。
答え1
変数宣言では、内部のすべての項目(パラメータ/コマンド/算術拡張を除く)は"
文字通り処理されます。
var="'foobar'"
$var
に拡張されます。'foobar'
いいえfoobar
。
したがって、以下が必要です。
AWK='{if (NR!=1) {print substr($2, 1, length($2)-1)}}'
事前拡張を実行するためにシェルは必要ないので、安全を保つために一重引用符を使用するのが最善です。二重引用符を使用すると、これは$2
シェルによってパラメータ拡張に事前拡張されます。たとえば、シェル固有のその他のトークンも同様です。
$AWK
Split + Glob演算子を無効にするためにこれを使用するときに引用することを忘れないでください。
… | awk "$AWK"