Bash:对于base来说价值太大了(带数字的字符串)

时间:2014-09-03 18:29:59

标签: bash

看起来这是一个常见问题,但我没有看到适用于我的具体情况的解决方案:

我的脚本采用了许多参数,这些参数是带有前导数字的字符串。然后,脚本逐行循环遍历输入流,以查看用户的参数是否包含在输入流中。不幸的是,我收到了if语句的错误,例如

...对于base来说价值太大了(错误令牌是“21000E1E06F54F”)......

#get user arguments
MyArray+=($OPTARG)

#for each array element, loop through an input looking for the string 
read <&3
if [[ $REPLY == *${MyArray[$i]}* ]]; then 
  found=1
fi

一个参数的例子是:21000E1E06F54F,但是我很犹豫地说它总是十六进制 - 我宁愿把它当作一个字符串。显然,我可以在$ OPTARG之前放一个字母,但后来字符串比较关闭或者我需要添加代码来解决添加的字母。有关如何解决此问题的任何想法?我希望可以添加一些简单的语法来将变量转换为字符串......

谢谢,

1 个答案:

答案 0 :(得分:2)

问题是你是在循环数组值,但是然后尝试将数组用作数组 index

以下是一个例子:

MyArray=(21000E1)
REPLY="FOO21000E1FOO"
for i in "${MyArray[@]}"
do
  if [[ $REPLY == *${MyArray[$i]}* ]]
  then
    echo "found"
  fi
done

这导致:

bash: 21000E1: value too great for base (error token is "21000E1")

以下是三种引用相同值的方法:

$i              # Correct, uses value directly
${MyArray[0]}   # Correct, looks up value using the value's index
${MyArray[$i]}  # WRONG,   tries to look up value using value as index

由于$i已经是值而不是索引,所以只需直接使用它:

MyArray=(21000E1)
REPLY="FOO21000E1FOO"
for i in "${MyArray[@]}"
do
  if [[ $REPLY == *"$i"* ]]
  then
    echo "found"
  fi
done

这会产生found