bashでパイプ(標準入力)から受け付けた内容を変数に代入する
Pocket

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

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

 

Pocket

Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

メールアドレスが公開されることはありません。

*