パイプから受け付けた内容を変数に入れる場合、以下の2パターンが考えられる。

1. readを用いる

普通にwhileなんかで使うように、readを使って代入をする。 この際、{}や()でグループ化をする必要がある。

echo ABC | { read v ;echo -e "$v"_TEST; }
echo ABC | (read v ;echo -e "$v"_TEST;)
[root@BS-PUB-CENT7-02 ~]# echo ABC | { read v ;echo -e "$v"_TEST; }
ABC_TEST
[root@BS-PUB-CENT7-02 ~]# echo ABC | (read v ;echo -e "$v"_TEST;)
ABC_TEST

ただし、もしパイプから受け付ける内容が複数行だった場合、1行目しか受け付けられない。 このため、readを使う場合はwhileと組み合わせて1行ずつ対応してやるなどが必要になる。

[root@BS-PUB-CENT7-02 ~]# echo -e "ABC\nDEF" | (read v ;echo -e "$v"_TEST;)
ABC_TEST

2. catを使う

readを使うほかだと、catを用いる方法がある。

echo -e "ABC" | { v=$(cat) ;echo -e "$v"_TEST; }
echo -e "ABC" | (v=$(cat) ;echo -e "$v"_TEST;)
[root@BS-PUB-CENT7-02 ~]# echo -e "ABC" | { v=$(cat) ;echo -e "$v"_TEST; }
ABC_TEST
[root@BS-PUB-CENT7-02 ~]# echo -e "ABC" | (v=$(cat) ;echo -e "$v"_TEST;)
ABC_TEST

なお、こちらの場合だと複数行でも変数内にそのまま入る。

[root@BS-PUB-CENT7-02 ~]# echo -e "ABC\nDEF" | (v=$(cat) ;echo -e "$v"_TEST;)
ABC
DEF_TEST