1行のheredocument - Bashで可能ですか?

1行のheredocument - Bashで可能ですか?

cat3行(開始者、内容、区切り文字)の自然な構文ではなく、1行でheredocumentを実行したいと思います。リダイレクトされたコンテンツは手動テキストファイルの一部になるように意図されており、その特定のファイルにできるだけ多くの行を保存したいので、これを行う必要があるのは主に審美的な側面です。

これによりcat <<< TEST > ~/myRep/tiesto tiesto TEST(通常は3つの部分に分けられます)、エラーが発生します。

tiesto: そのファイルやディレクトリはありません

テスト:対応するファイルまたはディレクトリはありません。

Bashで1行のドキュメントを実行できますか?

答え1

はい、しかしあなたはここにある文字列一つではなくここのドキュメント:

cat >"$HOME/myRep/tiesto" <<<'tiesto'

これは文字列をtiesto標準入力に送信し、cat標準出力のリダイレクトを介して文字列をファイルに書き込みます。$HOME/myRep/tiesto

here-stringsは標準ではありませんが、少なくとも実装されましたzsh。 、、、、そして。rcrcesakangaksh93bashmkshyash

答え2

以下を使用して、ここで(ここにある文字列の代わりに)文書を1行に配置できます。

eval $'cat << TEST > ~/myRep/tiesto\ntiesto\nTEST'

技術的には、これは1行のコードですが、$'...'再利用できる新しい3行のコードに拡張されますeval

を使用すると、evalいつでも1行にすべてのシェルコードを配置できます。

サポートされていないシェルの場合は、$'...'次のことができます。

eval "$(printf 'NL="\n"')"; eval "cat << TEST > ~/myRep/tiesto${NL}tiesto${NL}TEST"

または

eval "$(printf 'cat << TEST > ~/myRep/tiesto\ntiesto\nTEST')"

もちろんここでは

echo tiesto > ~/myRep/tiesto

はるかに簡単になります。または複数行の場合:

printf '%s\n' "line 1" "line 2" > ~/myRep/tiesto

関連情報