長いテキストをシェルに入れるには?

長いテキストをシェルに入れるには?

例えば

$ gcc -Wall abc.c

$ ./a.out <font name="Moronicity" size=12><!-- ignore this comment --><i></i>
<div style="aa">hello</div></font><img src="spacer.gif">
<div style="bb"><img src="spacer.gif"></div>

-bash: 予期しない表示 "<" 付近で構文エラーが発生しました。

このエラーは引き続き発生します。

答え1

このHTMLテキストが必要な場合範囲プログラムに追加してからシェルから保護するためにこれを引用する必要があります(シェルは、小記号をリダイレクトとして扱うなど)。

./a.out '<font name="Moronicity" size=12><!-- ignore this comment --><i></i>
<div style="aa">hello</div></font><img src="spacer.gif">
<div style="bb"><img src="spacer.gif"></div>'

プログラムにHTMLテキストを送信する必要がある場合入力する(stdin)、ここで説明されているように参照できます。残りのテキストが列1から始まることを示すために、最初の行をさらにインデントしました。

./a.out << 'EOF'
<font name="Moronicity" size=12><!-- ignore this comment --><i></i>
<div style="aa">hello</div></font><img src="spacer.gif">
<div style="bb"><img src="spacer.gif"></div>
EOF

一重引用符を囲むと、EOFテキストの引数は拡張されません。

答え2

<各特殊文字(、、、、[>の前にエスケープ文字を使用できますが、]この場合は非常に面倒です。代わりに、次のように引数全体を一重引用符で囲むことができます。

$ ./a.out '<font name="Moronicity" size=12><!-- ignore this comment --><i></i>
<div style="aa">hello</div></font><img src="spacer.gif">
<div style="bb"><img src="spacer.gif"></div>'

別のオプションはパラメータ文字列です

<font name="Moronicity" size=12><!-- ignore this comment --><i></i>
<div style="aa">hello</div></font><img src="spacer.gif">
<div style="bb"><img src="spacer.gif"></div>

paramsこれにより、ファイルにファイルのcat内容を出力するコマンドで関数を呼び出すことができます。

$ ./a.out "$(cat params)"

$()コマンドを実行する場合は、ファイル全体cat paramsを引数として含めるために二重引用符を使用しますa.out。 2つを組み合わせて、ファイルの内容をプログラムのパラメータに渡すことができます。

関連情報