我的目标是从一个命令的输出中初始化多个bash变量。具体来说,行i应该是变量i的值。示例:
我的命令是一个名为init.py的Python程序:
if __name__ == '__main__':
print("Value of A")
print("Value of B")
print()
print("Value of D")预期结果:
echo "A='$A', B='$B', C='$C', D='$D'"
# --> A='Value of A', B='Value of B', C='', D='Value of D'然后我尝试了,但没有成功:
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
发布于 2021-03-23 08:33:50
如果您有一个空行,使用IFS将无法工作,因为多个\n会被压缩。
但是,您可以使用readarray:
readarray -t arr < <(python init.py)
echo "A='${arr[0]}', B='${arr[1]}', C='${arr[2]}', D='${arr[3]}'"添加-d ''以\0分隔:
readarray -d '' -t arr < <(python init.py)来自man bash:
-d的第一个字符用于终止每个输入行,而不是换行符。如果delim是空字符串,则mapfile在读取NUL字符时将终止一行。
https://unix.stackexchange.com/questions/640638
复制相似问题