命令中的 Bash 参数替换

Pur*_*ret 3 shell-script command-substitution variable-substitution

我对Parameter Substitution有一个大致的了解,包括像这样的子字符串

foo="Hello World";
greeting=${foo:0:6}
Run Code Online (Sandbox Code Playgroud)

但是我用命令来做到这一点吗?

greeting="Hello"
md5greeting=$(echo $greeting | md5sum :0:6)
>>b1946a
Run Code Online (Sandbox Code Playgroud)

其中输出是“hello”的 md5sum 的前 6 个字符。

我如何实现这一目标?

jim*_*mij 5

参数替换不能那样工作,至少在 bash 中不能。您需要一个真正的变量(参数)并直接对其进行操作。所以例如像这样:

var=$(echo abcdefgh | cmd1 | cmd2 | ... )
var2="${var:2:4}"
Run Code Online (Sandbox Code Playgroud)

例外是zsh您可以将命令替换转换为“即时”参数并在一行中执行上述操作:

var2=${"$(echo abcdefgh | cdm1 | cmd2 | ... )":2:4}
Run Code Online (Sandbox Code Playgroud)