gpt4 book ai didi

bash - POSIX 替代多变量赋值与读取

转载 作者:行者123 更新时间:2023-11-29 09:19:55 24 4
gpt4 key购买 nike

bash 中(至少适用于 v4),以下命令允许从一个字符串中分配多个变量:

IFS=',' read a b <<< "s1,s2"

IFS=',' read a b < <(echo "s1,s2") # an equivalent

在这些命令之一之后:

$ echo $a
s1
$ echo $b
s2

但是提供的命令不符合 POSIX;如果在 sh (dash) 中运行:

sh: 1: Syntax error: redirection unexpected

这些命令的 POSIX 兼容替代品是什么?我试过了:

IFS=',' echo "s1,s2" | read a b

命令成功(返回代码 0),但是 echo $aecho $b 然后什么都不打印。

最佳答案

ab 已设置,但由于管道,read 命令在子 shell 中运行.当子 shell 退出时,变量消失。

你可以阅读这里的文档

IFS=, read a b <<END
s1,s2
END

要替换任意管道(或进程替换),您可以捕获管道的输出并将该变量放入 heredoc:

output=$( seq 10 20 | paste -sd, )
IFS=, read a b <<END
$output
END
echo "$a"
echo "$b"

输出

10
11,12,13,14,15,16,17,18,19,20

关于bash - POSIX 替代多变量赋值与读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53596930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com