Bash for 循环跳过数组的第一个元素

unr*_*rue 4 bash

在 bash 中,我有一个字符串,我想在数组中转换并在 for 循环中使用它,但跳过第一个元素。下面的代码不起作用:

build_string="100 99 98"
build_list=("$build_string")

echo $build_list
for i in "${build_list[@]:1}"
   do  echo "i: " $i
done
Run Code Online (Sandbox Code Playgroud)

for 循环不打印任何内容。你可以帮帮我吗?谢谢。

Dae*_*ter 7

我相信您没有正确(或根本没有)转换数组。请看这个片段:

build_string="100 99 98"
#build_list=("$build_string")  <-- this is not converting into array, following line is.
IFS=' ' read -r -a build_list <<< "$build_string"

echo $build_list
for i in "${build_list[@]:1}"
   do  echo "i: " $i
done

sleep 2
Run Code Online (Sandbox Code Playgroud)

现在的输出是:

100
i:  99
i:  98
Run Code Online (Sandbox Code Playgroud)

这听起来很合理。100当您询问时会打印echo $build_string。参考:bash中将字符串拆分为数组


正如prefire所指出的,第二行的双引号阻止了数组转换。这个片段也有效:

build_string="100 99 98"
build_list=($build_string)

echo $build_list
for i in "${build_list[@]:1}"
   do  echo "i: " $i
done

sleep 2
Run Code Online (Sandbox Code Playgroud)

注意:我sleep 2在末尾添加了 a,这样我就可以看到正在打印的内容。