StevieD Asked: 2018-08-28 20:54:01 +0800 CST2018-08-28 20:54:01 +0800 CST 2018-08-28 20:54:01 +0800 CST 命令替换语法 $() 被视为运算符还是命令? 772 我找不到任何将其称为其中之一的官方文档。无论如何,命令和操作员之间的技术区别到底是什么? command-substitution 3 个回答 Voted ilkkachu 2018-08-30T03:35:32+08:002018-08-30T03:35:32+08:00 POSIX 中的文本将其列在2.6 Word Expansions下,以及波浪号扩展、参数扩展、算术扩展、字段拆分、路径名扩展和引用删除。 同样,Bash 的手册将其列在Shell Expansions下。 前者使用“运算符”作为重定向运算符,还有;、&、|、&&、等||,(所以它不是其中之一。这显然也不是命令,所以无论术语是否重要,我不得不说这两者都不是。 Best Answer agc 2018-08-30T03:19:45+08:002018-08-30T03:19:45+08:00 一个命令: 通常有一个字母数字字符串作为它的名字。 是外部实用程序、内置函数或函数。从这个意义上说,大多数type内置函数产生的输出都是命令。 有前缀符号。 通常会更改某种 I/O。 运营商: 通常是一个符号字符串,可能没有名字,但可能有昵称。 内置函数不理解type(除非可能有一些名称容易混淆的函数或脚本)。 更经常有中缀或后缀语法。 有时像交通警察一样指挥 I/O,但不改变其中的内容。 有时指示进程的顺序。 $()是命令替换: 首先,(或最后,取决于我们如何看待它),它是一个字符串。 该字符串由其中列出的那些命令的文本输出组成。 [是一个 shell 内置命令: 这是test带有强制]后缀的命令。 [[是一个bashshell 关键字: 它就像一个更通用、更快的[内置命令,但是 SFAIK 没有相应的 -liketest命令。 shell 关键字包括诸如timeand之类的东西for,它们看起来像命令,但行为更像需要各种同级关键字作为分隔符和语法的运算符。此代码在type内置函数的输出上运行内置help函数,它显示了左侧关键字和内置函数的列表: COLUMNS=30 help -m | tail -n +9 | tee >(cut -d ' ' -f2) >(cut -c 17-30 | cut -d ' ' -f1) > /dev/null | sort | sed -n "s/.*/type '&'/e"';/found/!p' 将其与口语进行比较: 命令(和一些关键字)就像动词。 文件和字符串是名词。 运算符就像标点符号和介词。 抽象地说,运算符只是具有不同语法的命令,可以与其他命令一起用类似前缀样式的命令替换。它可能不会那么方便使用。 从分析上讲,编译后的 shell 代码可以通过反汇编程序运行,而运算符又只是命令,或者更确切地说是一系列汇编语言命令。 user286944 2018-08-31T03:00:01+08:002018-08-31T03:00:01+08:00 从用户的角度来看,命令替换是一种 shell 原语。它是 shell 中实现的一项功能,可执行多个操作(启动子 shell、执行命令...)并返回一个值(命令的输出)。在 shell 执行扩展之前,命令替换通常是命令的参数。换句话说,用户使用 shell 功能获取 shell 进程的结果。
POSIX 中的文本将其列在2.6 Word Expansions下,以及波浪号扩展、参数扩展、算术扩展、字段拆分、路径名扩展和引用删除。
同样,Bash 的手册将其列在Shell Expansions下。
前者使用“运算符”作为重定向运算符,还有
;
、&
、|
、&&
、等||
,(
所以它不是其中之一。这显然也不是命令,所以无论术语是否重要,我不得不说这两者都不是。一个命令:
通常有一个字母数字字符串作为它的名字。
是外部实用程序、内置函数或函数。从这个意义上说,大多数
type
内置函数产生的输出都是命令。有前缀符号。
通常会更改某种 I/O。
运营商:
通常是一个符号字符串,可能没有名字,但可能有昵称。
内置函数不理解
type
(除非可能有一些名称容易混淆的函数或脚本)。更经常有中缀或后缀语法。
有时像交通警察一样指挥 I/O,但不改变其中的内容。
有时指示进程的顺序。
$()
是命令替换:[
是一个 shell 内置命令:test
带有强制]
后缀的命令。[[
是一个bash
shell 关键字:[
内置命令,但是 SFAIK 没有相应的 -liketest
命令。shell 关键字包括诸如
time
and之类的东西for
,它们看起来像命令,但行为更像需要各种同级关键字作为分隔符和语法的运算符。此代码在type
内置函数的输出上运行内置help
函数,它显示了左侧关键字和内置函数的列表:将其与口语进行比较:
抽象地说,运算符只是具有不同语法的命令,可以与其他命令一起用类似前缀样式的命令替换。它可能不会那么方便使用。
从分析上讲,编译后的 shell 代码可以通过反汇编程序运行,而运算符又只是命令,或者更确切地说是一系列汇编语言命令。
从用户的角度来看,命令替换是一种 shell 原语。它是 shell 中实现的一项功能,可执行多个操作(启动子 shell、执行命令...)并返回一个值(命令的输出)。在 shell 执行扩展之前,命令替换通常是命令的参数。换句话说,用户使用 shell 功能获取 shell 进程的结果。