[解決済み] heredocをパイプに通すための多行構文、これは移植可能ですか?
2022-05-02 06:14:50
質問
この構文には慣れています。
cmd1 << EOF | cmd2
text
EOF
が、bashで書けることを発見したところです。
cmd1 << EOF |
text
EOF
cmd2
(heredoc は cmd1 の入力として使用され、cmd1 の出力は cmd2 にパイプされます)。 これは非常に奇妙な構文のように思えます。 移植性はあるのでしょうか?
解決方法は?
はい、POSIX規格で認められています。 2008年版による。
<ブロッククオート
here-documentの後に始まる1つの単語として扱われるものとする。
次の
<newline>
のみを含む行ができるまで続きます。
デリミタと
<newline>
がない場合は
<blank>
という文字が間に入ります。
そして、次のhere-documentがあれば、それを開始します。
そして、同じ行に複数の"here-documents"が存在するこの例も含まれています。
cat <<eof1; cat <<eof2
Hi,
eof1
Helene.
eof2
ですから、リダイレクトやパイプを行うことは問題ありません。 あなたの例は、このようなものに似ています。
cat file |
cmd
そして、シェルの文法(リンク先のページのさらに下)には、以下の定義があります。
pipe_sequence : command
| pipe_sequence '|' linebreak command
newline_list : NEWLINE
| newline_list NEWLINE
;
linebreak : newline_list
| /* empty */
つまり、パイプ記号の後に行末を付けても、パイプラインの一部とみなすことができるのです。
関連
-
[解決済み] MacOSのbashターミナルでexport PS1="\u[\033[m]@[\033[32m]\h:\[\033[33;1m]\w[\033[m]\$" は何を意味していますか?
-
[解決済み] bashで::演算子は何をするのですか?
-
[解決済み] 整数の合計を1行に1つずつ表示するシェルコマンド?
-
[解決済み] Bashスクリプトで、ある条件が発生したらスクリプト全体を終了させるにはどうしたらいいですか?
-
[解決済み] bashで "cat << EOF "はどのように動作するのですか?
-
[解決済み] キーと値のペアのファイルから環境変数を設定する
-
[解決済み] Bashコマンドからテキストファイルの内部を検索・置換する
-
[解決済み] 大きなテキストファイルを、同じ行数の小さなファイルに分割するにはどうすればよいですか?
-
[解決済み] シェルスクリプトからエコーを使わずにパスワードを取得する方法
-
[解決済み】MakefileのターゲットでBash構文を使用するにはどうすればいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Bashのシンタックスエラー:予期しないファイルの終わり
-
[解決済み】ZIPエラー - 何もできない
-
[解決済み] Bashで文字列から改行を削除する方法
-
[解決済み] curl: 引数リストが長すぎる
-
[解決済み] bash スクリプトを実行しているドッカーエントリーポイントが "パーミッション拒否" になる
-
[解決済み] bashスクリプトで変数の束縛を解除
-
[解決済み] findコマンドと一緒に使用するとエラー 'rm: missing operand' が発生する。
-
[解決済み] awkシステムコール
-
[解決済み] AWS CLIのプロファイルを一時的に切り替えるには?
-
[解決済み] MINGW64 "make build" エラー。"bash: make: コマンドが見つかりません"