このスクリプトでは、 "$ 1"が/ testファイルに保存されることになります。
#!/bin/bash
cat > /test << 'EOF'
$1
EOF
真実は..私は保つ必要があります
'EOF'
引数($ 1)にドル記号が含まれているため、「EOF」として。
$ 1ではなく、その引数を保存する必要があります
catドル記号を使用して保持したい」とは言わないでください。「を変更しhttpd.confて、<この設定>で<一部の設定>を変更したい」と言います。
このスクリプトでは、 "$ 1"が/ testファイルに保存されることになります。
#!/bin/bash
cat > /test << 'EOF'
$1
EOF
真実は..私は保つ必要があります
'EOF'
引数($ 1)にドル記号が含まれているため、「EOF」として。
$ 1ではなく、その引数を保存する必要があります
catドル記号を使用して保持したい」とは言わないでください。「を変更しhttpd.confて、<この設定>で<一部の設定>を変更したい」と言います。
回答:
あなたの前の質問に続いて、いくつかの未解釈のテキストといくつかの解釈されたテキストの両方をファイルに入れたいようです。その場合は、2つの異なるcats(またはechos)を使用します。
cat > /test <<'EOF'
some uninterpreted text $(pwd)
not substituted: $1
EOF
cat >> /test <<EOF
but this will substitute: $1
EOF
ここでは、いくつかのことが行われています。最初に、ヒアドキュメントの構文<<。上記の最初のように、ターミネータ文字列に引用符を含めると、ヒアドキュメント全体が解釈されず、パラメータも置換もありません。上記の2番目のように引用符を使用しない場合、などの変数はその値に置き換えられ、コマンド置換がテキストに含まれます。置換が必要かどうかに基づいて、「EOF」文字列を引用するかどうかを選択します。 cat$1
両方置くために、cat私たちが使用している同じファイルにSを>> リダイレクトを手段がファイルに追加すること:二(およびそれ以降)リダイレクションのために。1つ目は、シングルを使用し>てファイルをクリアし、最初からやり直します。
場合でも、そのノートの変数が置換されている、その変数の値に追加のドル記号がされていない再置換自身:
foo='$bar'
bar=hello
cat <<EOF
$foo
EOF
出力されます:
$bar
$barの値を代入せずに。
ただし、このスクリプト全体の引数に「$」を指定する場合は、コマンドラインでエスケープするか、全体を一重引用符で囲む必要があります。または、他の質問のようにコマンド置換を使用すると、ファイル全体の内容を直接入力できます。ファイルの内容にドル記号を含めます。そこで必ず置換文字列を引用してください:
oo.sh "$(cat myfile)"
myfileas のボディを取得し、必要に応じてor する$1ことができます。私の回答と同じ制限が適用されます。コマンドライン引数の長さに制限があり、ファイルがそれより長くなる可能性がある場合は、別の方法を見つける必要があります。あなたはあなたのシステムの限界が何であるかを知ることができますcatechogetconf ARG_MAX
1つの変数をファイルに出力したいだけのように思えます。その場合、これはうまくいきます:
echo $1 >/test
これ/testは、通常のユーザーには通常書き込み権限がないルートディレクトリにあることに注意してください。
編集:コマンドラインでドル記号を含む文字列を引用する必要があることを覚えておいてください。これが置換が発生する場所であり、スクリプトは事後的にそれについて何も実行できません。
$1)にドル記号が含まれているためです。」最初のコマンドラインパラメータを参照する場合は除きます。 スクリプトが実行される前に、置換が行われました。 コマンドラインでエスケープする必要があります。