【发布时间】:2021-06-29 10:16:39
【问题描述】:
我是 bash 脚本的新手,正在努力学习。
我有一个变量 $temp,它包含我从 API 调用中获得的信息,它是一个长长的 SHA1 哈希列表。我想获取 $temp 中的内容并创建一个数组,我可以循环遍历并将每个条目与我定义的字符串进行比较。不知何故,我似乎无法让它工作。我创建的数组总是只包含一个元素。就像 $temp 中字符串的其余部分被忽略了。
我尝试了多种方法,但都无法按我想要的方式工作。 这是sn-p的代码:
temp=$(curl --silent --request GET "https://api.pwnedpasswords.com/range/$shortendHash")
echo "Temp is: $temp"
declare -A myArr
read myArr <<<$temp
echo ${myArr[@]}
echo ${myArr[0]}
echo ${myArr[1]}
当我运行这个时,我得到一个完整的哈希列表,当我回显 $temp(第 2 行)时,类似这样:
"温度为:002C3CADF9FC86069F09961B10E0EDEFC45:1 003BE35BD9466D19258E79C8665AFB072F6:1 0075B2ADF782F9677BDDF8CC5778900D986:8 00810352C02B145FF304FCBD5BEF4F7AA9F:1 013720F40B99D6BCF6F08BD7271523EBB49:1 01C894A55EBCB6048A745B37EC2D989F102:1 030B46D53696C8889910EE0F9EB42CEAE97:4 03126B56153F0564F4A6ED6E734604C67E8:2 043196099707FCB0C01F8C2111086A92A0B:1 0452CABBEF8438F358F0BD8089108D0910E:5 0490255B206A2C0377EBD080723BF72DDAE:2 05AD1141C41237E061460DB5CA5412C1A48:4 05C1D058E4439F8F005EFB32E7553E6AA5B:1 067AF515CC712AC4ACA012311979DBC7C9A:2 ...等等..”
但是
echo ${myArr[@]}
echo ${myArr[0]}
echo ${myArr[1]}
返回(第一个值为${myArr[@]},第二个为${myArr[0]},最后一个为空行,表示数组位置1没有值):
002C3CADF9FC86069F09961B10E0EDEFC45:1 002C3CADF9FC86069F09961B10E0EDEFC45:1
我希望有人可以帮助解决这个问题。
提前非常感谢!
【问题讨论】:
-
read仅读取其输入的一行。 -
IFS=$'\n' read -r -d '' -a myArr < <(curl ... && printf '\0')将满足您的需求。根本没有理由拥有temp。
标签: arrays bash shell scripting