どこかにそのような問題があるかもしれません。しかし、簡単に見つけることができませんでした。
デフォルトでは、新しいボックスにbashスクリプトを作成したいと思います。以前使用したスクリプトです。
例:
#!/bin/bash -ex
hi='hello world!'
echo $hi
私は常に(複数行出力用)を使用します。
cat > script.sh <<EOF
#!/bin/bash -ex
hi='hello world!'
echo $hi
EOF
しかし、$hiやその他の記号に問題があることに気づくでしょう。これを行うための良い方法はありますか?ヒントとコツ?
答え1
ファイル終了マークを引用する必要があります。それ以外の場合は、変数の拡張(またはで始まるすべてが$
現在のコンテキストを取得します)。
比較する:
hi=here
cat >file.sh <<EOF
#!/bin/sh
hi=there
echo $hi
EOF
sh file.sh
(出力here
)
hi=here
cat >file.sh <<\EOF
#!/bin/sh
hi=there
echo $hi
EOF
sh file.sh
出力there
hi=here
cat >file.sh <<'EOF'
#!/bin/sh
hi=there
echo $hi
EOF
sh file.sh
出力there
。
または、以下を引用することができます$
。
hi=here
cat >file.sh <<EOF
#!/bin/sh
hi=there
echo \$hi
EOF
sh file.sh
(出力there
)
最初は、この驚くべき動作は、さまざまな目的のために少し異なるスクリプトを生成する必要があるときに便利です。
答え2
私はそれを見つけたかもしれないと思います。他の人がこの問題をどのように解決したかに関心があります。
cat > script.sh <<'EOF'
#!/bin/bash -ex
hi='hello world!'
echo $hi
EOF
freebsdには次のものが必要なようです。
cat > script.sh <<'EOF'
#!/bin/bash -ex
hi='hello world!'
echo $hi
'EOF'