找不到和错误的替换错误

找不到和错误的替换错误

这是我的脚本代码,用于查找用户何时输入 n 个数字来查找数字是奇数还是偶数,但我猜我的数组不起作用

#!/bin/sh
echo "Enter the value of n:"
read n
e=0
o=0
while [ $n -gt 0 ]
do
    echo "Enter the number:"
    read a
    t=`expr $a % 2`
    if [ $t -eq 0 ]
    then
        even[e]=$a
        e=`expr $e + 1`
    else
        odd[o]=$a
        o=`expr $o + 1`
    fi
    n=`expr $n - 1`
done
echo "The even numbers are ${even[*]}"
echo "The odd numbers are ${odd[*]}"
exit 0

我收到类似错误

test.sh: 15: test.sh: odd[o]=1: not found
test.sh: 12: test.sh: even[e]=2: not found
test.sh: 20: test.sh: Bad substitution

错误在哪里以及为什么会发生?

答案1

您正在运行的脚本/bin/sh根本不支持数组。bash另一方面,外壳有 。

您还使用了一些有些过时的构造,例如expr进行算术。

这是为以下内容编写的脚本版本bash

#!/bin/bash

read -p 'Enter n: ' n

while (( n > 0 ))
do
    read -p 'Enter number: ' a

    if (( a % 2 == 0 ))
    then
        even+=( "$a" )
    else
        odd+=( "$a" )
    fi
    n=$(( n - 1 ))
done

echo "The even numbers are ${even[*]}"
echo "The odd numbers are ${odd[*]}"

主要更改包括修复#!指向 的行bash、用于(( ... ))算术评估、$(( ... ))算术替换、read -p向用户提供提示、+=(...)向数组添加元素以及删除不需要的变量。


该脚本的非交互式版本,从命令行获取数字:

#!/bin/bash

for number do
    if (( number % 2 == 0 )); then
        even+=( "$number" )
    else
        odd+=( "$number" )
    fi
done

printf 'The even numbers: %s\n' "${even[*]}"
printf 'The odd numbers: %s\n'  "${odd[*]}"

测试:

$ bash script.sh 1 2 3 4
The even numbers: 2 4
The odd numbers: 1 3

相关内容