首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用单个命令的输出初始化多个bash变量

使用单个命令的输出初始化多个bash变量
EN

Unix & Linux用户
提问于 2021-03-23 08:12:42
回答 1查看 200关注 0票数 2

我的目标是从一个命令的输出中初始化多个bash变量。具体来说,行i应该是变量i的值。示例:

我的命令是一个名为init.py的Python程序:

代码语言:javascript
复制
if __name__ == '__main__':
  print("Value of A")
  print("Value of B")
  print()
  print("Value of D")

预期结果:

代码语言:javascript
复制
echo "A='$A', B='$B', C='$C', D='$D'"
# --> A='Value of A', B='Value of B', C='', D='Value of D'

然后我尝试了,但没有成功:

代码语言:javascript
复制
read A B C D < <(python init.py)
# --> Effect: A='Value', B='of', C='A', D=''

read -d如何解决这个问题?如何将其推广到其他分隔符,如空字节\0?\n' A B C D < <(python init.py)
# --> Effect: A='Value', B='of', C='A', D=''

IFS=G16H17如何解决这个问题?H28H19如何将其推广到其他分隔符,如空字节D10?H211G212\n' read A B C D < <(python init.py)
# --> Effect: A='Value of A', B='', C='', D=''

IFS=G16H17如何解决这个问题?H28H19如何将其推广到其他分隔符,如空字节D10?H211G212\n' read -dG16H17如何解决这个问题?H28H19如何将其推广到其他分隔符,如空字节D10?H211G212\n' A B C D < <(python init.py)
# --> Effect: A='Value of A', B='', C='', D=''

G16H17

如何解决这个问题?

H28H19

如何将其推广到其他分隔符,如空字节D10

H211G212

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2021-03-23 08:33:50

如果您有一个空行,使用IFS将无法工作,因为多个\n会被压缩。

但是,您可以使用readarray

代码语言:javascript
复制
readarray -t arr < <(python init.py)
echo "A='${arr[0]}', B='${arr[1]}', C='${arr[2]}', D='${arr[3]}'"

添加-d ''\0分隔:

代码语言:javascript
复制
readarray -d '' -t arr < <(python init.py)

来自man bash

-d的第一个字符用于终止每个输入行,而不是换行符。如果delim是空字符串,则mapfile在读取NUL字符时将终止一行。

票数 5
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/640638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档