パイプから受け付けた内容を変数に入れる場合、以下の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