サブシェルは here 文字列で実行されますか?

サブシェルは here 文字列で実行されますか?

私は、書き直し/再編成の一環として bash スクリプトをより適切に整理しようとしていますが、次のような状況での「ベスト プラクティス」が何であるかを考えています。

ymd=`echo "${NOEXT}" | egrep -o -m 1 "\-20[0-9]{2}\-[0-9]{2}\-[0-9]{2}\-"`

または

ymd=`egrep -o -m 1 "\-20[0-9]{2}\-[0-9]{2}\-[0-9]{2}\-" <<< ${NOEXT}` 

最初のバージョンでは、パイプによりサブシェルが作成されると思います。2 番目のバージョンでは here 文字列が作成されるのでしょうか? 作成されないと思いますが、私の仮定を検証したいと思います。

答え1

後者はそうではありませんが、(アイドル システムで) PID の増加を確認することで (大まかに) 確認できます。前者を実行すると 2 増加しますが、後者を実行すると 1 しか増加しません。

しかし、それはバシズムおそらく、ここのドキュメントに置き換える必要があるでしょう:

ymd=`egrep -o -m 1 "\-20[0-9]{2}\-[0-9]{2}\-[0-9]{2}\-" <<EOF
${NOEXT}
EOF`

答え2

を使用できbash、POSIX 互換性を必要としない場合は、 への外部呼び出しを使用せずに正規表現の一致を実行できますegrep

[[ $NOEXT =~ -20[0-9]{2}-[0-9]{2}-[0-9]{2}- ]]
ymd=${BASH_REMATCH[0]}

関連情報