[解決済み] 変数を展開するheredocを回避する方法は?重複
質問
ENVからの置換文字列を使ってスクリプトファイルを作成しようとしているが、エスケープを防ぐために
export PLACEHOLDER1="myPlaceholder1Value"
sudo /bin/su -c "cat << EOF > /etc/init.d/my-script
#!/bin/bash
myvariable_1=toto$PLACEHOLDER1
myvariable_final=\"dynamicvar=\${myvariable_1},\${myvariable_2}\"
EOF
"
という良くない結果になります。 myvariable_final はエスケープされず、init スクリプトの依存関係 ($remote_fs, $syslog, $network, $time) にあるものに置き換えられるからです。
#!/bin/bash
myvariable_1=totomyPlaceholder1Value
myvariable_2=titimyPlaceholder2Value
myvariable_final="dynamicvar=,"
バックスラッシュを付けると
\
の後ろに
$
で、なんとか置換を避けることができましたが、不要なバックスラッシュが発生してしまいます。
\
:
export PLACEHOLDER1="myPlaceholder1Value"
export PLACEHOLDER2="myPlaceholder2Value"
sudo /bin/su -c "cat << EOF > /etc/init.d/my-script
#!/bin/bash
myvariable_1=toto$PLACEHOLDER1
myvariable_2=titi$PLACEHOLDER2
myvariable_final=\"dynamicvar=\$\{myvariable_1},\$\{myvariable_2}\"
EOF
"
の結果が得られます。
#!/bin/bash
myvariable_1=totomyPlaceholder1Value
myvariable_2=titimyPlaceholder2Value
myvariable_final="dynamicvar=$\{myvariable_1},$\{myvariable_2}"
ウォンテッド/出席結果は、...だったはずです。
#!/bin/bash
myvariable_1=totomyPlaceholder1Value
myvariable_2=titimyPlaceholder2Value
myvariable_final="dynamicvar=${myvariable_1},${myvariable_2}"
を引用符で囲むと解決します。 EOF を引用符で囲み、必要に応じてバックスラッシュでエスケープを制御することで解決しました。
export PLACEHOLDER1="myPlaceholder1Value"
export PLACEHOLDER2="myPlaceholder2Value"
sudo /bin/su -c "cat << 'EOF' > /etc/init.d/my-script
#!/bin/bash
myvariable_1=toto$PLACEHOLDER1
myvariable_2=titi$PLACEHOLDER2
myvariable_final=\"dynamicvar=\${myvariable_1},\${myvariable_2}\"
EOF
"
どのように解決するのですか?
ただ
'EOF'
を使って、変数が展開されないようにします。
sudo /bin/su -c "cat << 'EOF' > /etc/init.d/my-script
# ^ ^
から
man bash
:
ここにある書類
このタイプのリダイレクションは、シェルが現在のソースから入力を読み込むように指示します。 デリミタ(区切り文字)のみを含む行が現れるまで、現在のソースから入力を読み込むよう を含む行が現れるまで、現在のソースから入力を読み込むようシェルに指示します。 その時点までに読み込まれたすべての行が、コマンドの標準入力として使用されます。 コマンドの標準入力として使用されます。
here-documentsの書式は。
<<[-]word here-document delimiter
パラメータ展開、コマンド置換、算術展開、パス名展開を行わない。 またはパス名展開が行われません。 wordの中に引用符で囲まれた文字がある場合 が引用されている場合、区切り文字はwordの引用除去の結果であり、Here-documentの行は展開されません。 の行は展開されません。 もし word が が引用符で囲まれていない場合、Here-Document のすべての行はパラメータ展開、コマンド置換、算術展開の対象となります。 展開、コマンド置換、算術展開が行われます。 . 後者の場合 後者の場合、文字列
\<newline>
は無視され\
は引用符で囲む必要があります。\
,$
そして`
.
関連
-
[解決済み] Bashスクリプトのソースディレクトリをスクリプト自体から取得するにはどうすればよいですか?
-
[解決済み] Bashシェルスクリプトでディレクトリが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Bashで通常のファイルが存在しないかどうかを判断する方法を教えてください。
-
[解決済み] Bashで文字列変数を連結する方法
-
[解決済み] Bashで文字列が部分文字列を含むかどうかをチェックする方法
-
[解決済み] Bashスクリプトからプログラムが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Vimで文字を改行で置き換える方法
-
[解決済み] Bashで変数で定義された数値の範囲を反復処理するにはどうすればよいですか?
-
[解決済み] Bashスクリプトでファイルへのheredocを書き込むには?
-
[解決済み】Bashでheredoc値を変数に代入する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] コードを含むファイルをcat <<EOF >>する方法は?
-
[解決済み] スクリプトの実行に関連したファイルの参照
-
[解決済み] bashのcurlステートメントに'&'文字を含める方法
-
[解決済み] Cronジョブおよびランダム時間(指定時間内
-
[解決済み] コマンドでファイルを使用し、出力を切り詰めることなく同じファイルにリダイレクトするにはどうすればよいですか?
-
[解決済み] Bashはどのように異なるディレクトリコンテキストでコマンドを実行できますか?
-
[解決済み] homebrew パッケージがインストールされているかどうかを検出する
-
[解決済み] bash スクリプトで ENTER キー押下をシミュレートする
-
[解決済み] bashでファイル(引数)を編集しているコマンドを "その場 "で実行するには?
-
[解決済み] 空のディレクトリの検索