Shell (${var/=/})不';在阿尔卑斯Linux中不工作,而在zsh中工作良好。有类似的选择吗?

Shell (${var/=/})不';在阿尔卑斯Linux中不工作,而在zsh中工作良好。有类似的选择吗?,shell,sh,alpine,Shell,Sh,Alpine,我使用这个片段将字符串拆分为数组 line=FOO=BAR arr=(${line//=/ }) 可在以后使用,例如(获取分割值): 在zsh环境中工作得很好,但在alpelinux/bin/sh(可能是ash)环境中不起作用。我得到: ./env.sh:第15行:语法错误:意外“(“(应为“完成”) 是否有在Alpine Linux上工作的等效字符串拆分命令?使用heredoc: line=FOO=BAR IFS='=' read -r var value <<EOF $line

我使用这个片段将字符串拆分为数组

line=FOO=BAR
arr=(${line//=/ })
可在以后使用,例如(获取分割值):

在zsh环境中工作得很好,但在alpelinux
/bin/sh
(可能是
ash
)环境中不起作用。我得到:

./env.sh:第15行:语法错误:意外“(“(应为“完成”)

是否有在Alpine Linux上工作的等效字符串拆分命令?

使用heredoc:

line=FOO=BAR
IFS='=' read -r var value <<EOF
$line
EOF
line=FOO=BAR
如果使用heredoc读取-r var值:

line=FOO=BAR
IFS='=' read -r var value <<EOF
$line
EOF
line=FOO=BAR

如果s='='read-r var value实际上,POSIX sh既不支持数组也不支持
${var/str/replacement}
,因此有多个依赖的特性不能保证出现在任何
/bin/sh
实现中。也就是说,您可以在Alpine上安装bash,我可能建议您这样做。(顺便说一句,我不倾向于在任何shell上推荐原始代码;
IFS='='read-r varname value
将在所有bash、ksh和zsh中表现得更可靠,特别是当值包含空格或glob字符时)。实际上,POSIX sh既不支持数组也不支持
${var/str/replacement}
,因此有多个依赖的功能不能保证在任何
/bin/sh
实现中出现。也就是说,您可以在Alpine上安装bash,我可能建议您这样做。(顺便说一句,我不倾向于在任何shell上推荐原始代码;
IFS='='read-r varname value
将在所有bash、ksh和zsh中表现得更可靠,特别是当值包含空格或全局字符时).非常好的观点。我很不好意思我自己错过了它。非常好的观点。我很不好意思我自己错过了它。