<<<はどういう意味ですか? [コピー]

<<<はどういう意味ですか? [コピー]

<<< どういう意味ですか?例は次のとおりです。

$ sed 's/a/b/g' <<< "aaa"
bbb

より多くのLinuxコマンドに適用される汎用コマンドですか?

sedプログラムに文字列を供給しているように見えますが、aaa通常この目的のために<<または<を使用しませんか?

答え1

他の人は基本的な質問に答えました:それは何ですか? (答え:これここにある文字列.)

なぜ動作するのか見てみましょう。

次のように、コマンドの標準入力に文字列を入力することもできます。

echo "$string" | command

しかし、Bashでパイプを導入するとは、個々のコマンドがサブシェルで実行されることを意味します。考えてみてください:

echo "hello world" | read first second
echo $second $first

2 番目の echo コマンドの出力は、空白を 1 つだけ印刷します。と?私の変数はどうなりましたか?読み取りコマンドはパイプ内にあるため、サブシェルで実行されます。標準入力から2つの単語を正しく読み、それを変数に割り当てます。ただし、コマンドが完了した後サブシェルの終了そして変数が失われます。

時には中括弧を使用してこの問題を解決することができます。

echo "hello world" | {
    read first second
    echo $second $first
}

必要な値が含まれているが、スクリプトの現在のシェルで変数がまだ使用できない場合は問題ありません。

この混乱した状況を解決するには、ここで文字列を使用してください。

read first second <<< "hello world"
echo $second $first

ああ、はるかに良いです!

答え2

<<<ここで文字列を表します。

$ cat <<< 'hi there'
hi there

右の単語を左のコマンドの標準入力に渡します。


<<ここに文書を示します。

$ cat <<EOF
> hi
> there
> EOF
hi
there

EOFどんな言葉でも可能です。

ここでは、ドキュメントは、ファイル全体を生成したり、長いメッセージを表示するためにシェルスクリプトでよく使用されます。

cat > some-file <<FILE
foo
bar
bar bar
foo foo
FILE

<ファイルの内容をコマンドの標準入力に渡します。

$ cat < /etc/fstab
/dev/sda2               /boot   ext4            nosuid,noexec,nodev,rw,noatime,nodiratime       0 2
/dev/sda4               /       ext4            rw,noatime,nodiratime,  0 1
/dev/sdb5               /var    ext4            nosuid,noexec,nodev,rw,relatime 0 2
 ...

答え3

見てバッシュのマニュアルページ。この記号はここにファイル&ここに文字列があります。これにより、連続した文字列に複数行のデータ入力を生成できます。お客様がリクエストしたバリエーションは次のとおりです。ここにある文字列

Bashのマニュアルページから

Here Strings
   A variant of here documents, the format is:

          <<<word

   The word is expanded and supplied to the command on its standard input.

メモ:詳細は以下のサイトでも確認できます。バッシュリファレンスマニュアルここでは、どの文字列について説明します。

答え4

ここで意味するのは文字列です。

<<< strings

文字列が拡張され、標準入力のコマンドに提供されます。

あなたの例では、文字列はaaastdinを介してsedコマンドに入力されます。

関連情報