<<<はどういう意味ですか?次に例を示します。
$ sed 's/a/b/g' <<< "aaa"
bbb
より一般的なLinuxコマンドで機能するものはありますか?
sed
プログラムに文字列aaa
を供給しているようですが、通常、<<または<が使用されていませんか?
他は基本的な質問に答えました:それは何ですか?なぜそれが役立つのか見てみましょう。
次のように、コマンドの標準入力に文字列を渡すこともできます。
echo "$string" | command
ただし、bashでは、パイプを導入すると、個々のコマンドがサブシェルで実行されます。このことを考慮:
echo "hello world" | read first second
echo $second $first
2番目のechoコマンドの出力では、1つのスペースだけが出力されます。なぁ?変数はどうなりましたか?読み取りコマンドはパイプライン内にあるため、サブシェルで実行されます。 stdinから2ワードを正しく読み取り、変数に割り当てます。しかし、その後コマンドは完了し、サブシェルは終了となり、変数は失われます。
中括弧でこれを回避できる場合があります:
echo "hello world" | {
read first second
echo $second $first
}
値の必要性が含まれていても問題ありませんが、スクリプトの現在のシェルにはまだこれらの変数がありません。この混乱する状況を改善するには、ヒア文字列を使用します
read first second <<< "hello world"
echo $second $first
ああ、はるかに良い!
<<<
は、ヒア文字列を示します。
$ cat <<< 'hi there'
hi there
右側のWordを左側のコマンドの標準入力に渡します。
<<
はヒアドキュメントを示します。
$ cat <<EOF
> hi
> there
> EOF
hi
there
EOF
は任意のWordにすることができます。
ここでドキュメントは、ファイル全体を作成したり、長いメッセージを表示したりするために、シェルスクリプトで一般的に使用されます。
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
...
Bash man page を見てください。この表記は、hereドキュメント&here文字列と呼ばれるものの一部です。これにより、複数行のデータ入力を1つの連続した文字列として生成できます。あなたが尋ねているバリエーションは、ここで文字列と呼ばれています。
Bash manページからの抜粋
Here Strings
A variant of here documents, the format is:
<<<Word
The Word is expanded and supplied to the command on its standard input.
ここで文字列を意味します。
<<< strings
文字列が展開され、標準入力でコマンドに提供されます。
あなたの例では、文字列aaa
はstdinを介してsedコマンドにフィードされます。