&>
我从用于处理错误和数据的指令中读取
$ls -al test test2 test3 badtest &> test7
$ cat test7
ls: cannot access 'test': No such file or directory
ls: cannot access 'badtest': No such file or directory
-rw-r--r-- 1 me staff 78 Oct 28 19:07 test2
-rw-r--r-- 1 me staff 0 Oct 28 19:03 test3
尽管如此,当我检查时过时且已弃用的语法 [Bash Hackers Wiki]
它推荐2>&1
$ ls -al test test2 test3 badtest > test7 2>&1
$ cat test7
ls: cannot access 'test': No such file or directory
ls: cannot access 'badtest': No such file or directory
-rw-r--r-- 1 me staff 78 Oct 28 19:07 test2
-rw-r--r-- 1 me staff 0 Oct 28 19:03 test3
我应该遵循哪种模式
答案1
这由你决定。
shell将和bash
理解为相同的,您可以使用前一种语法作为编写后者的快捷方式。其他 shell 可能会抛出语法错误或对.&>file
>file 2>&1
&>
如果你仅有的编写bash
脚本(而不是例如的脚本/bin/sh
),那么一定要使用&>
,但是如果您发现自己想要或需要编写便携的脚本(需要在任何类似 shell 下运行/bin/sh
或可由任何sh
类似 shell 执行的脚本,其中bash
之一是ksh
,zsh
,dash
是其他),那么&>
是您应该避免的事情之一。
所有sh
类似的 shell 实现POSIX 标准在语法和文法方面,但bash
其他 shell 还提供了语法便利性,如数组和正则表达式匹配等扩展,并且某些 shell 可能以与执行方式&>
完全不同的方式在 POSIX 标准上进行扩展。bash
有关的:
- 本网站上有关
bash
可移植性的其他问题(DuckDuckGo 搜索链接)。