为 bash 中来自另一个命令的变量赋值

为 bash 中来自另一个命令的变量赋值

在 bash 中执行此操作,使 SUFFIX 变量保存 /dev/fd/[fd],

SUFFIX=<( echo "&*645\[]}#@name" | sed -r 's/[^[:alnum:]]+/_/g' )

我应该如何分配括号之间执行的命令的实际结果?所以在这种情况下 SUFFIX 应该被赋予一个值_645_name?

答案1

您已使用以下语法流程替代,它将一个命令的输出作为另一个命令的输入传递。但你想要的是命令替换,它将命令的输出作为字符串获取。命令替换使用$(…).

SUFFIX=$( echo "&*645\[]}#@name" | sed -r 's/[^[:alnum:]]+/_/g' )

请注意,如果您使用的是 bash,则可以使用它自己的内置结构来完成此操作。如果要清理的文本位于变量中foo

shopt -s extglob
SUFFIX=${foo//+([^[:alnum:]])/_}

答案2

如果这是你的后缀,答案应该很简单:

suffix="${str##*[!_A-Za-z0-9]}"

用这种方法得到的碎片最多只能得到头部和尾部。但你可以获得这些:

head="${str%"${tail:="${str##*[!_A-Za-z0-9]"}"}"}"

相关内容