如何将“>&2”存储在变量中

如何将“>&2”存储在变量中

类似的问题,但没有答案:我们如何运行存储在变量中的命令?

如何在 bash 脚本中执行以下操作?

error=">&2"
echo 'something went wrong' $error

代替

echo 'something went wrong' >&2

为什么?
因为如果您输入错误>2&,它会正常工作,但会将错误消息写入名为2.

答案1

就像他们在评论中所说的那样,你真的不知道。

好吧,你可以用 来做到这一点eval,但是你会遇到引用/转义所有内容的麻烦别的在该命令行上。

不过,您可以使用函数做一些事情:在重定向下运行给定的简单命令;或者只是向 stderr 写入一条消息:

#!/bin/bash
tostderr() {
        "$@" >&2
}

warn() {
        local IFS=" "
        printf "%s\n" "$*" >&2
}

tostderr printf "warning: %s\n" "something happened"

warn another thing to warn about

强调简单的命令在第一个上,它不是eval,并且你不能在命令中使用 shell 语法。例如,tostderr foo | bar它仅重定向输出foo(通过管道到 stderr),并且tostderr (foo | bar)不起作用。


如果您使用 zsh,并且确实想要这样做,您可以使用全局别名来添加重定向(但有些人可能认为这接近混淆编码):

#/usr/bin/zsh

alias -g TOSTDERR='>&2'
echo something bad happened TOSTDERR

相关内容