Shell中的命令替换是什么?

用户名

我使用Ubuntu 16.04使用bash和我试图在阅读维基百科,在这里和在这里,但我不明白“命令替换”在一般的shell脚本的含义,并且在猛砸特别,如:

$(command)

或者

`command`

这个名词是什么意思?

编辑:当我第一次发布这个问题时,我已经知道替换的纯概念以及变量替换的Linux概念(通过执行将变量替换为其值),但是无论如何我仍然错过了此shell功能的目的原因或一组原因。


问题锁定后我的答案

命令替换是一种具有专用语法的操作,既可以执行命令,也可以由变量保存(存储)此命令的输出,以备后用。

的示例date

thedate="$(date)"

然后,我们可以使用以下命令打印结果printf

printf 'The date is %s\n' "$thedate"
  1. 命令替换语法为$()
  2. 该命令本身是date
  3. 结合我们得到$(date)的结果,它的值是替换的结果(执行后我们可以得到)。
  4. 我们将该值保存在变量中$thedate,以备后用。
  5. printf根据上面的命令,使用来显示变量所保存的输出值

注意:\ninprintf是换行符。

库萨兰达

“命令替换”是Shell语言功能的名称,它使您可以执行命令并让该命令的输出替换(替代)命令的文本。

Shell语言没有其他功能可以使您做到这一点。

命令替换(即整个$(...)表达式)其输出替换,这是命令替换的主要用途。

命令替换执行的命令在子Shell中执行,这意味着它具有自己的环境,不会影响父Shell的环境。

不过,并非所有子Shell执行都是命令替换(请参阅最后的其他示例)。

显示在子shell中执行命令替换的示例:

$ s=123
$ echo "hello $( s=world; echo "$s" )"
hello world
$ echo "$s"
123

在这里,变量s设置为string 123在下一行,echo在包含命令替换结果的字符串上调用。命令替换设置s为字符串world并回显此字符串。字符串world命令替换中命令的输出,因此,如果在命令下运行该字符串set -x,我们将看到上面的第二行将被扩展为echo 'hello world',这将hello world在终端上生成

$ set -x
$ echo "hello $( s=world; echo "$s" )"
++ s=world
++ echo world
+ echo 'hello world'
hello world

在跟踪输出中的命令替换子shell的每个级别上bash添加了额外级别的+提示,其他shell可能不会这样做)

最后,我们显示了命令替换内的命令在其自己的子Shell中运行,因为它不影响s调用Shell中的value(的值s仍然是123,而不是world)。

在其他情况下,命令在子外壳中执行,例如

echo 'hello' | read message

在中bash,除非您设置lastpipe选项(仅在非交互式实例中),否则它将read在子shell中执行,这意味着$message将不会在父shell中进行更改,即echo "$message"在执行上述命令后将回显一个空字符串(或任何值)$message之前)。

进程替换bash也将在子shell中执行:

cat < <( echo 'hello world' )

这也与命令替换不同。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

sh shell 中的 Bash“源”命令的替换是什么?

在shell命令中>&是什么意思?

在shell命令中。?? *是什么意思?

在makefile或shell命令中〜是什么意思?

Shell测试('[')命令中-e选项的含义是什么?

shell“测试”命令中的“ -size +0”是什么意思

!是什么意思!在Shell中执行命令之前?

shell脚本中exec命令的用途是什么?

#:3在shell命令中是什么意思

seq shell命令中的-0是什么意思

在 ruby 中运行 shell 命令的最快方法是什么?

从bash shell中为grunt安装phplint的命令是什么?

命令中的$()是什么?

: 命令在 shell 脚本中的用途是什么,因为它明确地什么都不做?

git 命令中的@ 是什么?

shell中的>>`<<``>>`的行为是什么

bash shell中的“ $$”是什么?

Unix Shell中的%是什么

shell中的“ -n”是什么?

Conky文件中的pre_exec命令的Lua“替换”是什么?

bash命令`command`的作用是什么,当它出现在shell脚本中时是什么?

Golang中的Shell扩展(命令替换)

命令替换中的POSIX Shell注释

Shell命令替换中的意外行为

为什么在Bash命令替换子Shell中找不到`/ bin / ping`?

Makefile:为什么命令替换在$(shell)函数中不起作用?

在 Mongo shell 中访问我的用户详细信息的命令是什么?

执行完shell命令后,Jenkins中的工作目录是什么?

shell命令“ basename”获取路径中的最后目录名称的“ ant”等效项是什么