试图逃避这个bash脚本中的反斜杠

时间:2016-10-04 21:58:43

标签: bash scripting

以下bash脚本接受0到100之间的任何数字输入,并打印出屏幕上的平均数字。该脚本还具有输入验证,除了0-100和q或Q之间的数字外,不允许任何其他内容。输入q或Q后,它会计算结果并输出到屏幕。输入验证还会检查以确保没有输入空值,输入特殊字符以及没有输入数字/字母组合,特殊字符/数字组合等。

我遇到的唯一问题是反斜杠字符。反斜杠在此脚本中被转义,当我运行脚本并输入反斜杠时,它会暂停并要求您按返回以继续脚本。似乎脚本仍然有效,但我很好奇为什么它会暂停。我在这个网站上看到的大部分建议都是为了逃避反斜杠的反斜杠,但这不起作用。

#! /bin/bash

AVERAGE="0"
SUM="0"
NUM="0"
clear

while true; do
    echo -n "Enter your score [0-100%] ('q' for quit): "; read SCORE;

    if [[ "$SCORE" == *[a-pA-pr-zR-Z]* ]] ||
       [[ "$SCORE" == *['!'\\@#\$%^\&*()_+~\`\-=\[\]\{\}\|:\;\'\"\<\>,.?/\\]* ]] ||
       [[ -z "$SCORE" ]] ||
       (( "$SCORE" <  "0" )) || (( "$SCORE" > "100" ))
    then
        echo "Be serious.  Come on, try again: "
    elif [[ "$SCORE" == [qQ] ]]; then
        echo "Average rating: $AVERAGE%."
        break
    else
        SUM=$[$SUM + $SCORE]
        NUM=$[$NUM + 1]
        AVERAGE=$[$SUM / $NUM]
    fi
done

echo "Exiting."

1 个答案:

答案 0 :(得分:1)

使用read -r禁用反斜杠转义,默认情况下已启用。

Options:
  -r   do not allow backslashes to escape any characters