比较两个整数变量

比较两个整数变量

我想打印两个名为ijof 嵌套的迭代器for loops,只要它们不相等。错误信息:

意外标记“then”附近出现语法错误

#!/bin/bash
read n
array=()
for i in `seq 1 $n`
do
    read num
    array+=$num
done

count=0
count2=0
countmax=0
for i in `seq 1 $n`; do
    for j in `seq 1 $n`; do
        if [ $i -ne $j ]; then
            echo $i $j
        fi
    done
done

我做错了什么?

答案1

我做错了什么?

排名不分先后,

  • 您没有#!/bin/bash或相当于第一行。
  • 您似乎没有发布失败的实际脚本。 (这里的内容在语法上是正确的。)
  • 你没有用双引号引用你的变量,"$n"而不是$n.
  • 您使用过时的反引号而不是 进行评估$( ...)
  • 您尚未测试您的代码https://shellcheck.net/
  • 您没有缩进代码块以使其更易于阅读。
  • 如果要向数组添加元素,请使用array+=($num).代码中的内容是字符串连接到最后一个元素。
  • 在(新的)第一个块中,您分配给元素 (0 .. n-1),但稍后使用元素 (1 .. n)。
  • 在(新的)第二个块中,您正在比较索引的不等式而不是数组元素。您的意思是比较"${array[$i]}" -ne "${array[$j]}"(或者,对于(( ... ))构造而言,array[i] != array[j])?

(我可能应该指出,其中一些是好的实践,而不是基本的编码规则。)

这是应用了我的建议的代码:

#!/bin/bash
read -p 'Number of elements: ' n

array=(0)    # We don't use element zero
for i in $(seq "$n")
do
    read -p 'Element: ' num
    array+=($num)
done

for i in $(seq "$n")
do
    for j in $(seq "$n")
    do
        # Compare the array elements rather than the indices
        # Is this what you intended?
        if (( array[i] != array[j] ))
        then
            echo "${array[$i]} ${array[$j]}"
        fi
    done
done

答案2

seq我还会通过使用 for 循环来消除使用:

#!/bin/bash

read -p 'Number of elements: ' n

array=(0)
for (( i = 1; i <= n; i++ ))
do
    read -p 'Element: ' num
    array+=("$num")
done

for (( i = 1; i <= n; i++ ))
do
    for (( j = 1; j <= n; j++ ))
    do
        (( array[i] != array[j] )) && echo "${array[i]} ${array[j]}"
    done
done

相关内容