変数をサブシェルに渡す

変数をサブシェルに渡す

設計された例:

#!/usr/bin/bash
MYVAR=$(cat /somedir | grep -i myval)

今私は以下が欲しい:

#!/usr/bin/bash
BASEDIR=/somedir
MYVAR=$(cat [BASEDIR?] | grep -i myval)

変数はサブシェルにどのように渡すべきですか?

ベストアンサー1

のみ:

#!/bin/sh -
BASEDIR=/somedir
MYVAR=$(grep -rie myval -- "$BASEDIR")

子シェルは親シェルのコピーであり、変数やその他のほとんどのエントリを含むすべてのメモリを継承します。

catディレクトリで実行することはほとんど意味がありません。ここでは、変数の内容を引数として渡し、grep(非標準)-rオプションを使用して、grepそのディレクトリの再帰降下で見つかったファイルをgrepします。

個々のファイルをリンクすることはcatあまり意味がありません。

このためにbashをインストールする必要はありません。shインストールも同様に良く、おそらくより効率的です。

grepディレクトリを繰り返し降順に見つけたすべての一般ファイルの接続を実行するには、次のようにします。

MY_VAR=$(find -- "$BASEDIR" -type f -exec cat {} + | grep -i myval)

したがって、これらのファイルは特定の順序でリンクされません。 GNUを使用すると、grep次のこともできます。

MYVAR=$(grep -rhie myval -- "$BASEDIR")

whereは、-h同様の効果を得るために一致する行が見つかったファイル名の印刷をスキップします。順序が異なる場合があり、一部のファイルに区切り文字がない最後の数行がある場合でも、違いが発生する可能性があります。

おすすめ記事