这次在实验室的练习让我疯了! 虽然这似乎是一项非常简单的任务,但我得到了错误,我真的不知道它们来自哪里。
简单运动:
要进行数字匹配,我使用简单的正则表达式。代码应该是这样的:
#!/bin/bash
echo "amount: "
read AMOUNT
REGEX="^[0-9]*$"
if [[ $AMOUNT =~ $REGEX ]]
then
echo "amount (in $US) = "$AMOUNT
else
echo "invalid amount, or input is not a number, quitting"
fi
但无论我如何看待它,它都会发出错误:"amount.sh: 11: [[: not found"
甚至教授也很惊讶。
我做错了什么?
(使用BASH shell v4.1.5,使用Ubuntu 10.04。)
答案 0 :(得分:4)
一般改进:
#!/bin/bash
echo "amount: "
read AMOUNT
REGEX='^[0-9]+$'
if [[ "$AMOUNT" =~ $REGEX ]]
then
echo "amount (in \$US) = $AMOUNT"
else
echo "invalid amount, or input is not a number, quitting"
fi
许多小引用问题窗口已关闭。我假设您需要输入(AMOUNT中没有字符会出错)。
答案 1 :(得分:3)
我无法在bash 3.2.39(Ubuntu 8.04.01)上重现这一点。您使用$US
时遇到错误,但[[
看起来没问题。我还测试了bash 4.1.10(OpenSUSE 11)。
您似乎没有向我们提供您的整个脚本。它抱怨第11行,但你的脚本在第6行有[[
。
荒谬......确保你的[
确实是方括号字符,而不是看起来像方括号的奇怪的Unicode字符。你可能会重新输入整个脚本,因为它有多短(或者像我一样将其剪切并粘贴到这个问题上)。
请确保您不会在某些行上意外地使用Windows换行符(\ r \ n)。这有时会产生这样的问题(虽然我不认为这是这个问题)。
为了好玩,请切换到单个[
而不是[[
。 [
实际上是一个可执行文件(/usr/bin/[
)。它可能无法处理=~
运算符,但您会看到行为是否发生了变化。