如何避免在维护返回代码的同时调用外部实用程序(grep)两次&输出?

时间:2016-06-29 09:13:27

标签: bash

我有以下Bash函数,它从Java风格的属性文件返回属性值。找不到它的属性,它应该返回非零值。如果找到,将打印属性的值&返回码必须为零。

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?第一个exec用于状态代码,第二个用于属性值。如果我使用$(grep parameters)表示法,那么grep将在子shell中启动,我无法获得它的返回代码,并且无法确定属性搜索的成功或失败。

2 个答案:

答案 0 :(得分:2)

这应该有效:

...
local line
if line=$(egrep "^${pname}=" "$pfile" 2>/dev/null); then
...

答案 1 :(得分:0)

正如@matt指出的那样,你可以获取该行,然后检查命令的退出状态:

line=$(...)
if test $? -eq 0; then
  # success
  ...
else
  # property not found
  ...
fi

修改

总结: