gpt4 book ai didi

arrays - 将带空格的引用项读入数组

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

假设我有文件 foo.txt

"The" "quick brown" "fox" "jumps over" "the" "lazy dog."

我想将文件中的这些“字段”读取到一个数组中。但是,如果该字段有空格,我的尝试就会失败

$ read -a bar < foo.txt

$ echo ${bar[0]}
"The"

$ echo ${bar[1]}
"quick

我看到答案建议更改 IFS,但这是一行,所以似乎没有帮助。

最佳答案

这是一个可以完成这项工作的函数。对于巨大的字符串,它可能会很慢,但可以正常工作,没有像任意代码执行或路径名扩展这样的警告:

#!/bin/bash

parse_quoted_items() {
# Return array is parse_quoted_items_ary
local line=$1
parse_quoted_items_ary=() parse_quoted_items_error=
while [[ $line ]]; do
if [[ $line =~ ^[[:space:]]*\"([^\"]*)\"([[:space:]]+.+|)[[:space:]]*$ ]]; then
parse_quoted_items_ary+=( "${BASH_REMATCH[1]}" )
line=${BASH_REMATCH[2]}
else
parse_quoted_items_error=$line
return 1
fi
done
}

然后你可以使用 as

IFS= read -r line < foo.txt
if parse_quoted_items "$line"; do
declare -p parse_quoted_items_ary
else
printf >&2 "There was an error parsing the string at %s\n" "$parse quoted_items_error"
exit 1
fi

这不是一个令人满意的答案,但我怀疑是否有任何(安全的)方法不显式解析字符串。

关于arrays - 将带空格的引用项读入数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12924909/

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