如果有人能回答我,我将不胜感激,而不是只是删除痴迷地说这个那个那个,而不是真正回答。
我有一个命令
#/bin/sh
while :; \
do sleep 6h & wait $${!}; \
$$是否指的是第二个进程,即SLEEP?这意味着什么${!}
?我真的不知道语法(我的意思是我理解流程,但我无法确切地找到为什么它有两个 $$ 符号,以及 {!} 的用途。
如果有人能在删除我的问题之前启发我,我将非常感激,谢谢。
答案1
官方文档说:
($!) 扩展为最近放入后台的作业的进程 ID,无论是作为异步命令执行还是使用 bg 内置函数执行(请参阅作业控制内置函数)。
https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Shell-Parameters
以及$${!}
都是${!!}
错误。
如果您按照发布的方式运行脚本,则应该会出现错误:
./tst.sh: line 3: wait: `1234{!}': not a pid or valid job spec
这里 1234 是 shell 本身的 pid,从$$
.并且{!}
只是一个字符串常量。
在语法上是${!!}
正确的,但尝试对变量进行间接扩展!
,并且由于此类变量不可能真正存在 - 错误是:${!!}: bad substitution
间接解释如下: https://www.gnu.org/savannah-checkouts/gnu/bash/manual/bash.html#Shell-Parameter-Expansion
如果您确实有该代码(带有$${!}
)它确实有效。那么这很可能不是 shell 脚本,而是将 shell 脚本嵌入到其他语言中。也用于$
标记变量的那个。大多数此类语言使用重复的美元符号作为转义,因此在宿主语言使用包含 shell 脚本的字符串完成后就$$anything
变成了 a 。$anything