Javaスタイルのプロパティファイルからプロパティ値を返す次のBash関数があります。プロパティーが見つかりませんでした。ゼロ以外の値を返します。見つかった場合、プロパティの値は&の戻りコードがゼロでなければなりません。リターンコードと出力を維持しながら、外部ユーティリティ(grep)を2回呼び出すことを避けるにはどうすればよいですか?
function property_get() {
local pfile="$1"
local pname="$2"
if egrep "^${pname}=" "$pfile" 2>&1 >/dev/null; then
local line="$(egrep "^${pname}=" "$pfile")"
printf "${line#*=}"
return 0 # success
else
return 1 # property not found
fi
}
質問:どのようにしてegrepを2回呼び出すことを避けるのですか?最初のexecはステータスコード、2番目はプロパティ値です。 $(grep parameters)
表記を使用すると、grepがサブシェルで起動され、戻りコードが取得できず、プロパティ検索の成功または失敗を判断できなくなります。
理由だけではなく、行を取得し、ないここで説明したように、
$?
が0
あるlocal
の終了ステータスに設定されますlocal var=$(cmd)
で@mattは私の間接的なチェックのようです。 grepはすでにリターンコードを提供して成功または失敗を報告しています。私はその事実を利用したいと思っています。 –
「終了ステータスの確認方法」(http://linuxcommando.blogspot。 co.uk/2008/03/how-to-check-exit-status-code.html)? – matt