Bash 什么是;回音a&;!d";你到底是一步一步做的吗?
我尝试了以下方法,得到了:Bash 什么是;回音a&;!d";你到底是一步一步做的吗?,bash,echo,alias,Bash,Echo,Alias,我尝试了以下方法,得到了: $ echo a&!d echo a&disown [1] 16089 a $ echo a & disown [1] 16101 a 然后我尝试了以下方法,得到了: $ echo a&!d echo a&disown [1] 16089 a $ echo a & disown [1] 16101 a 有人能一步一步地解释一下在这两种情况下到底发生了什么吗?什么是!d它到底像别名还是什么?谁,在什么条件下
$ echo a&!d
echo a&disown
[1] 16089
a
$ echo a & disown
[1] 16101
a
然后我尝试了以下方法,得到了:
$ echo a&!d
echo a&disown
[1] 16089
a
$ echo a & disown
[1] 16101
a
有人能一步一步地解释一下在这两种情况下到底发生了什么吗?什么是
!d
它到底像别名还是什么?谁,在什么条件下展开它?该行由两个命令组成:
echo a &
及
第一个运行echoa
,&
使其在后台执行,即在子shell中异步执行
第二个是历史替换,它运行以d
开头的最后一个命令。在您的情况下,这似乎是否认
,但它可能是任何东西
disown
从活动作业表中删除当前作业;在本例中,“当前作业”是指上次在后台启动的作业
使用历史替换时,shell在实际运行命令之前打印扩展;这就是为什么你会看到这条线
echo a&disown
随着你命令的扩展
下一行,
[1] 16089
是因为进程已在后台启动:[1]
是作业编号,16089
是进程ID。带有a
的行仅是echo a
命令的输出
第二次运行命令时,如果不进行历史扩展,则
[1] 16101
直接的,因为没有历史的扩展来显示;作业编号再次为1
,进程ID已更改为16101
总结:
echo a&!d
echo a&disown # History expansion
[1] 16089 # Job number and process ID
a # Output from echo command
echo a&disown
[1] 16101 # Job number and process ID
a # Output from echo command
echo a &
及
第一个运行echoa
,&
使其在后台执行,即在子shell中异步执行
第二个是历史替换,它运行以d
开头的最后一个命令。在您的情况下,这似乎是否认
,但它可能是任何东西
disown
从活动作业表中删除当前作业;在本例中,“当前作业”是指上次在后台启动的作业
使用历史替换时,shell在实际运行命令之前打印扩展;这就是为什么你会看到这条线
echo a&disown
随着你命令的扩展
下一行,
[1] 16089
是因为进程已在后台启动:[1]
是作业编号,16089
是进程ID。带有a
的行仅是echo a
命令的输出
第二次运行命令时,如果不进行历史扩展,则
[1] 16101
直接的,因为没有历史的扩展来显示;作业编号再次为1
,进程ID已更改为16101
总结:
echo a&!d
echo a&disown # History expansion
[1] 16089 # Job number and process ID
a # Output from echo command
echo a&disown
[1] 16101 # Job number and process ID
a # Output from echo command
echoa&disown
会被镜像,为什么会有镜像,为什么不echoa&!d
以及为什么在上面[1]16101
@yukashimahuksay你的意思是为什么在第一种情况下打印命令?我承认我的问题发布得非常不当。我也不知道历史。非常感谢!我是指我发布的两个命令的输出之间的差异。究竟是什么原因。到底是什么事件导致了这种差异呢?Yukashimahuk说,壳牌的历史扩张可能是出乎意料的,而且相当混乱。如果您不想发生这种奇怪的事情,可以使用set+H
将其关闭。谢谢您的回答。但是我的问题实际上是关于为什么echoa&disown
会被镜像,为什么会有镜像,为什么不echoa&!d
以及为什么在上面[1]16101
@yukashimahuksay你的意思是为什么在第一种情况下打印命令?我承认我的问题发布得非常不当。我也不知道历史。非常感谢!我是指我发布的两个命令的输出之间的差异。究竟是什么原因。到底是什么事件导致了这种差异呢?Yukashimahuk说,壳牌的历史扩张可能是出乎意料的,而且相当混乱。如果您不想发生这种奇怪的事情,可以使用set+H
将其关闭。