「EOF」を使用して bash スクリプトに変数を渡し、変数をリテラルとして処理します。

「EOF」を使用して bash スクリプトに変数を渡し、変数をリテラルとして処理します。

このスクリプトでは "$1" を /test ファイルに保存します。

#!/bin/bash
cat > /test << 'EOF'
$1
EOF

実は..必ず守らなければならない

'EOF'

私のパラメータ($ 1)にドル記号が含まれているため、「EOF」と表示されます。

ただし、$1の代わりにこのパラメータを保存する必要があります。

ベストアンサー1

あなたのフォローアップ前の質問、あなたが欲しいと思います。両方一部の解釈されていないテキストと一部の解釈されたテキストがファイルに入ります。この場合は、2つの異なるcats(またはechos)を使用してください。

cat > /test <<'EOF'
some uninterpreted text $(pwd)
not substituted: $1
EOF
cat >> /test <<EOF
but this will substitute: $1
EOF

ここではいくつかのことが起こっています。まず、トレドック構文はと同じです<<。上記の最初の文字列のように、終端文字列に引用符を含めると、Heredoc全体が解釈されません。つまり、引数や代替項目はありません。もしあなたならいいえ引用符を使用してください。第二 cat上記では、同様の変数が$1その値に置き換えられ、コマンド置換がテキストに含まれます。置換が必要かどうかに応じて、文字列「EOF」を引用するかどうかを選択できます。

2つのcatsを私たちが使う同じファイルに入れる>> リダイレクト2番目(および後続)のリダイレクトの場合:これはファイルに追加されることを意味します。最初の操作では、単一の>汎用ファイルを使用して再起動します。

そんなときにも参考にしてください変数が置き換えられました、変数値の異なるドル記号いいえ自分を交換してください:

foo='$bar'
bar=hello
cat <<EOF
$foo
EOF

以下を出力します。

$bar

$bar置き換える値はありません。

ただし、スクリプト全体で引数に "$"を指定する場合は、コマンドラインでそれをエスケープするか、全体を一重引用符で囲む必要があります。または、コマンドの置き換え良いその他の質問ファイルの内容にドル記号を含めて、ファイル全体の内容を直接入れることができます。そこから代替文字列を引用します。

oo.sh "$(cat myfile)"

myfileasの本文を取得し、$1必要catに応じてこれを実行できます。echoと同じ制限私の答えはそこにあります適用:コマンドライン引数の長さは制限されています。ファイルがこれより長い場合は、別の方法を見つける必要があります。次のコマンドを使用して、システムの制限を確認できます。getconf ARG_MAX

おすすめ記事