为什么我的Shell代码总是返回Even,即使数字是奇数

ruyhziif  于 2023-10-23  发布在  Shell
关注(0)|答案(1)|浏览(92)

我用这段代码来检查用户的输入(总是数字)是偶数还是奇数,但是脚本总是返回“Even”

read -p "Enter a number: " x
if ((x % 2 == 0));
   then echo "Even"; 
   else echo "Odd"; 
fi

我使用这个测试:

def solution(x)
  puts("Number: #{x}")
  run_shell(args: [x]).strip
end

describe "Solution" do
  it "should print 'Even' for even numbers" do
    [0, 2, 4, 78, 100000, 1545452, -2, -10, -123456]
      .each { |x| expect(solution(x)).to eq('Even') }
  end
  
  it "should print 'Odd' for odd numbers" do
    [1, 3, 5, 77, 100001, 1545455, -1, -3, -9, -12345]
      .each { |x| expect(solution(x)).to eq('Odd') }
  end
end
mwecs4sa

mwecs4sa1#

您的Ruby代码在shell脚本的命令行 * 上传递参数 *,但shell脚本在其标准输入流 * 上查找参数 *。
因为在算术上下文中,shell将空字符串视为0,所以得到的结果总是偶数。
只有在命令行上没有提供输入时,才考虑从stdin中阅读:

#!/usr/bin/env bash

if [[ $1 ]]; then
  x=$1
else
  read -p 'Enter a number: ' x
fi

if ((x % 2 == 0)); then
  echo "Even"
else
  echo "Odd"
fi

相关问题