gpt4 book ai didi

arrays - 为什么我的字符串不能很好地拆分成数组?

转载 作者:太空狗 更新时间:2023-10-29 13:51:45 25 4
gpt4 key购买 nike

我有一个 bash 脚本,它将 git show 的输出读入一个数组。

首先,我使用以下语句创建一个字符串:

git show --quiet --date=rfc --pretty=format:"%s|%b|%an, %ae|%H|%cd" HEAD

这给了我想要的模式:

SUBJECT|BODY|AUTHOR_NAME, AUTHOR_EMAIL|COMMIT_HASH|COMMIT_DATE

我可以确认生成的字符串在意想不到的地方包含|字符。

接下来,我想将字符串拆分为 Split string into an array in Bash 中假设的字段:

  IFS='|' read -ra FIELDS <<< "$(git show --quiet --date=rfc --pretty=format:"%s|%b|%an, %ae|%H|%cd" $i)"

当我现在查看 FIELDS 时,只有前两个元素被填充,其他的都是空的:

echo ${FIELDS[0]} # prints SUBJECT
echo ${FIELDS[1]} # prints BODY
echo ${FIELDS[2]} # prints nothing
echo ${FIELDS[3]} # prints nothing
echo ${FIELDS[4]} # prints nothing

我做错了什么?为什么最后三个数组元素为空?

最佳答案

正如@l0b0 所指出的,问题是由 git show 输出中的换行符引起的,就在“BODY”之后——read 命令读取单个线,所以它停在那里。您可以通过将其行定界符从换行符更改为...无内容来使其读取整个内容,使用 read -d '':

IFS='|' read -d '' -ra FIELDS <<< "$(git show --quiet --date=rfc --pretty=format:"%s|%b|%an, %ae|%H|%cd" $i)"

这会将 ${FIELDS[0]} 设置为“SUBJECT”,将 ${FIELDS[1]} 设置为“BODY\n”,${ FIELDS[2]} 到“AUTHOR_NAME, AUTHOR_EMAIL”等。然而,一个复杂的问题是它还将输出末尾的句法换行符视为最后一个字段的一部分,即 ${FIELDS[4]} 将被设置为“COMMIT_DATE\n”。

关于arrays - 为什么我的字符串不能很好地拆分成数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23625850/

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