curl 我想使用Bash脚本从API和for循环中自动提取数据,但出现错误

jvidinwx  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(119)
#!/bin/bash

declare -a gpu_array=("rtx3060", "rtx3070", "rtx3080", "rtx3090", "rx6700")
#host = "http://192.168.1.31:5000/"

for gpu in ${gpu_array[*]}; do
    gpu_url = $"http://192.168.1.31:5000/$gpu"
    value = $(curl "${gpu_url}") 
    echo $value>> trial.txt
done

“"”trial.sh:第8行:值:找不到命令trial.sh:第7行:GPU_URL:未找到命令curl:(3)URL使用错误/非法格式或缺少URL trial.sh:第8行:值:找不到命令trial.sh:第7行:GPU_URL:未找到命令curl:(3)URL使用错误/非法格式或缺少URL trial.sh:第8行:值:未找到命令“"”

ymzxtsji

ymzxtsji1#

数组元素之间用空格隔开,没有逗号,也不需要双引号,因为元素中不包含任何特殊字符,但它们不会造成伤害。

declare -a gpu_array=(rtx3060 rtx3070 rtx3080 rtx3090 rx6700)

不要使用$"...",它是用于本地化的。这里使用普通的"..."就足够了,实际上,这里不需要任何引号:

gpu_url=http://192.168.1.31:5000/$gpu

注意,赋值运算符两边没有空格,如果使用空格,bash会将变量名作为要运行的命令,将=作为它的第一个参数,这通常不是你想要的。

gpu_url=http://192.168.1.31:5000/$gpu
value=$(curl "$gpu_url")

顺便说一句,在数组上迭代的标准方法是

for gpu in "${gpu_array[@]}"; do

即使数组元素包含空格,它也能正常工作。
出于同样的原因,总是用双引号引变量是一个好的做法(除非你想在空格上拆分值)。

echo "$value"

如果在某些shell中值为-n,这仍然会导致一些意外的结果,因此,更安全的做法是只对常量字符串使用echo,而对动态内容使用printf

printf '%s\n' "$value"

相关问题