ローカル変数とリモート変数の混合と正しい使い方と参照

ローカル変数とリモート変数の混合と正しい使い方と参照

私が知る限り、bashで推奨されるパターンは常にシェル変数を引用することです。
例えば。"$VAR"​ 代わりに、引用符が解釈される変数に提供するのと同じ安全性をどのように取得できますか?$VAR
離れて
たとえば、次のようになります。

ssh server.com<<CODE
TARGET="target dir"
COUNT= \$( ls /foo/bar/\$TARGET | wc -l )  
echo \$COUNT > count.txt    

CODE   

コードが機能するには、および$COUNTをエスケープする必要があります$TARGET
しかし、この特定のケースに対して「$COUNT」または「$TARGET」が提供するのと同じセキュリティをどのように達成できますか?

修正する
問題のある部分だけを貼り付けました。
変数が区切られた文書の外側に定義された他の行があるため<<'CODE'
より完全な例:

SOME_STRING="SOME VALUE"  
ssh server.com<<CODE  
echo $SOME_VALUE > test_file.txt  # <--- does not work if I use <<'CODE'
TARGET="target dir"
COUNT= \$( ls /foo/bar/\$TARGET | wc -l )  
echo \$COUNT > count.txt    

CODE   

ベストアンサー1

この記事では二重引用符が保持されているようです。たとえば、次のコマンドを考えてみましょう。

cat <<HEREDOC
"this will still be quoted"
HEREDOC

これにより、出力として次の引用符付き文字列が生成されます。

"this will still be quoted:

したがって、通常どおり変数を参照できる必要があります。

SOME_STRING="SOME VALUE"
ssh server.com<<CODE
echo "$SOME_VALUE" > test_file.txt
TARGET="target dir"
COUNT="\$( ls /foo/bar/\$TARGET | wc -l )"
echo "\$COUNT" > count.txt
CODE

コマンド置換で変数を参照する方法については、次の記事を参照してください。Bashで$(コマンドを置き換える)内で引用

SOME_STRINGコードスニペットをそのままコピーしましたが、代わりに変数を使用しようとしていたようですSOME_VALUE。以下は、ローカルで実行して予想される結果を得るために少し変更されたコードの一部です。

mkdir -p "/foo/bar/target dir"

SOME_STRING="SOME VALUE"
ssh localhost<<CODE
echo "$SOME_STRING" > test_file.txt
TARGET="target dir"
COUNT="\$( ls "/foo/bar/\$TARGET" | wc -l )"
echo "\$COUNT" > count.txt
CODE

おすすめ記事