通过变量打印到标准输出

print to stdout by a variable

以下作品:

[nir page]$ echo 1 2>&1 >&1
1

但是当我使用一个变量时它不会:

[nir page]$ out="&1"
[nir -page]$ echo $out
&1
[nir page]$ echo 1 2>$out >$out
[nir page]$

我做错了什么?

想法是将输出发送到 /dev/null 除非我要求输出到标准输出。

What am I doing wrong?

您假设部分语法可以存储在变量中。他们不能。 & 必须按字面输入,不能在变量中。

Idea is to send output to /dev/null except when I ask to stdout.

你为此使用文件描述符。

if when I dont ask; then
   exec 1>/dev/null 2>&1
fi
echo 1

或使用linux/dev/*个文件:

out=/dev/stdout  # or /dev/null
echo 1 >"$out"