このスクリプトでは "$1" を /test ファイルに保存します。
#!/bin/bash
cat > /test << 'EOF'
$1
EOF
実は..必ず守らなければならない
'EOF'
私のパラメータ($ 1)にドル記号が含まれているため、「EOF」と表示されます。
ただし、$1の代わりにこのパラメータを保存する必要があります。
答え1
あなたのフォローアップ前の質問、あなたが欲しいと思います。両方一部の解釈されていないテキストと一部の解釈されたテキストがファイルに入ります。この場合は、2つの異なるcat
s(またはecho
s)を使用してください。
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つのcat
sを私たちが使う同じファイルに入れる>>
リダイレクト2番目(および後続)のリダイレクトの場合:これはファイルに追加されることを意味します。最初の操作では、単一の>
汎用ファイルを使用して再起動します。
そんなときにも参考にしてください変数が置き換えられました、変数値の異なるドル記号いいえ自分を交換してください:
foo='$bar'
bar=hello
cat <<EOF
$foo
EOF
以下を出力します。
$bar
$bar
置き換える値はありません。
ただし、スクリプト全体で引数に "$"を指定する場合は、コマンドラインでそれをエスケープするか、全体を一重引用符で囲む必要があります。または、コマンドの置き換え良いその他の質問ファイルの内容にドル記号を含めて、ファイル全体の内容を直接入れることができます。そこから代替文字列を引用します。
oo.sh "$(cat myfile)"
myfile
asの本文を取得し、$1
必要cat
に応じてこれを実行できます。echo
と同じ制限私の答えはそこにあります適用:コマンドライン引数の長さは制限されています。ファイルがこれより長い場合は、別の方法を見つける必要があります。次のコマンドを使用して、システムの制限を確認できます。getconf ARG_MAX
答え2
変数をファイルに出力したいようです。この場合、次のように動作します。
echo $1 >/test
これは/test
ルートディレクトリにあり、通常のユーザーは通常書き込み権限を持っていません。
編集:ドル記号を含む文字列を引用する必要があることを覚えておいてください。コマンドラインから。ここで交換が発生し、その後、スクリプトはこれに対して何もできません。