: [arguments]
除了扩展参数和执行重定向之外,不执行任何操作。
管道或复合命令如何与 一起使用:
?
大括号似乎并不能解决问题:
$ : { echo hello | cat; }
bash: syntax error near unexpected token `}'
$ : { if test 1; then echo hello; fi; }
bash: syntax error near unexpected token `then'
双引号会阻止一些扩展,这:
允许。
echo
使用代替时也会出现同样的问题:
。
$ echo { echo hello | cat; }
bash: syntax error near unexpected token `}'
$ echo { if test 1; then echo hello; fi; }
bash: syntax error near unexpected token `then'
基本上我想运行一个命令来扩展和重定向:
,并使用检查结果echo
。引用没有提到管道和控制流关键字不起作用,所以我只希望别名扩展不会发生。
谢谢。
答案1
: { echo hello | cat; }
shell 解析该命令行。首先,它尝试找到第一个命令的结尾。那一端就是管道。
所以第一个命令是
: { echo hello
它什么也不做。特别是它没有向 cat 传输任何内容。和
: { echo hello | cat;
消失后只剩下左边,}
这不是一个有效的命令。
答案2
:
是一个命令,因此它可以像其他命令一样在管道中使用:
something | :
: | something
something | : | something-else
...但是它不会对您有任何好处,因为该:
命令不执行任何操作:它不接受输入并且不产生输出。因此,这些管道都不是非常有用的管道(除了我认为第二个管道是稍微短一点的管道something </dev/null
)。
至于您的示例命令:
$ : { echo hello | cat; }
这看起来像是一个语法错误,就像 shell 报告的那样。该{ ... }
构造可以使用代替一个简单的命令,但不以某种方式...与它结合(?)。您到底希望这个复合命令做什么?也许您需要添加更多关于您想要实现的目标的细节。