Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 语法错误:使用Bash时需要操作数_Linux_Bash_For Loop - Fatal编程技术网

Linux 语法错误:使用Bash时需要操作数

Linux 语法错误:使用Bash时需要操作数,linux,bash,for-loop,Linux,Bash,For Loop,我有两个要循环的数组。我正确地构造了它们,在进入for循环之前,我会回显它们,以确保数组一切正常。 但当我运行脚本时,它会输出一个错误: l<=: syntax error: operand expected (error token is "<=" l这是因为在某个点上${hitEnd[k]}扩展为零(它是未定义的)。我在中得到了相同的错误((l有点像bandaid-y,但是您将for循环重写为while循环: l="${hitStart[k]}" while [[ "$l" -

我有两个要循环的数组。我正确地构造了它们,在进入for循环之前,我会回显它们,以确保数组一切正常。 但当我运行脚本时,它会输出一个错误:

l<=: syntax error: operand expected (error token is "<="

l这是因为在某个点上
${hitEnd[k]}
扩展为零(它是未定义的)。我在
中得到了相同的错误((l有点像bandaid-y,但是您将for循环重写为while循环:

l="${hitStart[k]}"
while [[ "$l" -le "${hitEnd[k]}" ]]; do
        let array[l]++      
        k=$((k+1))
        l=$((l+1))
done

我仍然不清楚为什么我在问题中提到的情况不起作用,但感谢你的努力..我想你会理解的!注意变量
k
总是递增的,记住
for
循环中的测试部分(也就是说,
lof当然,我希望如此。我的意思是在第一次运行(k=0)时,它将增加数组一次,在第二次运行(k=1)时,它将再次增加数组..好的,然后在某个点,
k
将达到值
${#hitEnd[@]}
,而这正是
hitEnd[k]的时候
未定义并扩展为空字符串!砰!啊,对!我不知道原因,但我认为错误是在for循环的第一次运行时输出的。但是您所说的有道理。再次感谢您的努力。。
k=0
for ((l=${hitStart[0]};k<${#hitEnd[@]} && l<=${hitEnd[k]};l++)); do
k=$((k+1))
((++k))
#!/bin/bash
k=0
#this loop is just for being sure array is loaded
while ((k<=${#hitEnd[@]})); do
    echo "hitEnd is: ${hitEnd[k]} and hitStart is: ${hitStart[k]}"
    # here outputs the values correct 
    ((++k))
done
k=0
for ((l=hitStart[0];k<${#hitEnd[@]} && l<=hitEnd[k];++l)); do
    ((++array[l]))
    ((++k))
done
#!/bin/bash
# define arrays hitStart[@] and hitEnd[@]...
# define array array[@]

#this loop is just for being sure array is loaded
for ((k=0;k<${#hitEnd[@]};++k)); do
    echo "hitEnd is: ${hitEnd[k]} and hitStart is: ${hitStart[k]}"
    # here outputs the values correct 
    ((++k))
done

for ((k=0;k<${#hitEnd[@]};++k)); do
    for ((l=hitStart[k];l<=hitEnd[k];++l)); do
        ((++array[l]))
    done
done
l="${hitStart[k]}"
while [[ "$l" -le "${hitEnd[k]}" ]]; do
        let array[l]++      
        k=$((k+1))
        l=$((l+1))
done