是否可以清除$ {arg?word}失败产生的消息

时间:2011-10-28 11:51:58

标签: bash shell sh

当bash解释脚本并遇到

${arg?error message}

当取消设置arg时,脚本在打印错误消息后终止。不幸的是,bash在错误消息中加上“$ 0:line $ LINENO:arg:”。是否可以取消附加信息?我希望错误消息完全是“错误消息”。

2 个答案:

答案 0 :(得分:2)

您可能必须避免使用${PARAMETER?WORD}构造并手动执行此操作。例如,像

if [ -z "${arg+set}" ]; then
    printf 'error message\n' >&2
    exit 2
fi

答案 1 :(得分:0)

我猜想如果你想要这样做,你可能无法以Bash中最自然的方式实现你的最终目的。这样的事情会更好:

if [ -z $arg ]; then
    echo error message >&2;
else
    $arg
fi

更直接地回答这个问题:

(${arg?error message}) |& sed "s/.*: .*: //"

说明:|&将括号中的代码块的标准错误(顺便说一下,这是必要的)连接到sed(流编辑器),它会剥离使用正则表达式不需要的消息部分。