问题很简单,但我不知道如何解决。代码如下:
missing_filters=('Sort key' 'Page' 'Pagesize' 'Sort direction')
for level in {0..$((${#missing_filters[@]}-1))}
do
echo "${#missing_filters[$level]}^|^${missing_filters[$level]}"
done | column -tes "^"
它应该显示数组中每个元素,前面有 1-4,如下所示:
1 | Sort key
2 | Page
3 | Pagesize
4 | Sort direction
但是,我得到了错误./advancedplexapi.sh: line 4608: {0..3}: syntax error: operand expected (error token is "{0..3}")
。我觉得这很奇怪,因为错误准确地显示了我希望 shell 如何解释它(即{0..3}
)。我没有做错什么,否则 shell 不会在错误中给我正确的输出。为什么它不起作用?当然,我该如何解决这个问题?
答案1
它没有按预期工作,因为括号扩展是在变量替换之前完成的。
您也可以使用seq
或for
-loop 来代替:
for level in $(seq 0 $((${#missing_filters[@]}-1))); ...
或者
for (( level=0;level<="$((${#missing_filters[@]}-1))";level++ )); ...
有关详细信息,请参阅这个答案另一个问题。
也"${#missing_filters[$level]}"
不会给出1 2 3 4
,而是扩展到每个值的字符数--> 8 4 8 14
。最好使用$((level+1))
。
但是,您可以更轻松地循环数组键:
for k in "${!missing_filters[@]}"; do
printf '%s | %s\n' "$((k+1))" "${missing_filters[$k]}"
done