请教:Shell命令`grep myname /etc/passwd >& /dev/null`的含义及`&`的作用
Shell重定向中
>&符号的含义解析 先明确你提到的三个示例的作用:
- case 1:
grep myname /etc/passwd > /dev/null:仅将命令的标准输出(stdout,文件描述符1)重定向到/dev/null,屏蔽正常查找结果的屏幕输出,但如果命令出现错误(比如权限不足),错误信息(标准错误stderr,文件描述符2)仍会打印到屏幕。 - case 2:
grep myname /etc/passwd >&2:这里的&用来标识后面的2是文件描述符(对应标准错误流),作用是把标准输出的内容重定向到标准错误流中,最终标准错误流的内容(包括这次重定向过来的标准输出)会默认输出到屏幕。 - case 3:
grep myname /etc/passwd >& /dev/null:这里的&表示要同时将标准输出和标准错误都重定向到/dev/null,等价于命令grep myname /etc/passwd > /dev/null 2>&1的简写,会完全屏蔽所有输出(不管是正常查找结果还是错误信息)。
>&中&的核心含义
- 当
>&后跟随数字(如>&2)时:&是用来明确告知Shell,后面的数字是文件描述符,而非普通文件名,避免Shell误将数字当作文件名创建或写入。 - 当
>&后跟随文件路径(如>& /dev/null)时:&表示要同时重定向标准输出和标准错误到该文件路径,一次性完成两个输出流的重定向操作。
内容的提问来源于stack exchange,提问作者myoldgrandpa
相关产品推荐
相关产品推荐

