使用命令替换默认分配给空变量

Rob*_*cco 4 shell bash string command-substitution variable-substitution

我正在尝试使用以下语法:

A=${B:-C}
Run Code Online (Sandbox Code Playgroud)

A变量在哪里,B是我要分配C的值,如果 B 为空,则是默认值。

现在我想B用 command替换nc -l 443,所以如果nc通过端口 443 接收到一个字符串,它被分配给变量A,否则A设置为默认值。我将命令写为:

A=${`nc -l 443`:-NULL}
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

-bash: A=${`nc -l 443`:-NULL}: bad substitution
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

cuo*_*glm 6

嵌套替换在任何现代 Bourne-like shell 中都不可用,除了zsh

$ print -rl -- ${$(echo):-C}
C
$ print -rl -- ${$(echo 1):-C}
1
Run Code Online (Sandbox Code Playgroud)

在其他外壳中:

A=$(nc -l 443)
A=${A:-C}
Run Code Online (Sandbox Code Playgroud)