我在BASH中編寫了一個簡單的計算器。它的目的是循環所給出的參數,檢查它們是否正確,執行冪函數並將其餘部分傳遞給expr以進行計算。除乘法之外的所有工作。
當我這樣做Bash將數組傳遞給expr
my_script.sh 2 \* 2
我得到的語法錯誤,從EXPR。使用bash -x進行檢查讓我知道
expr 2 '\*' 2
*在撇號中。我不知道如何擺脫它,所以expr可以正確解析它。
if [ $# -le 0 ]
then
usage
exit 1
fi
ARGS=("${@}")
while [ $# -gt 0 ]
do
if [ $OP -eq 0 ]
then
if [[ $1 =~ ^[-]{0,1}[0-9]+$ ]]
then
ELEMS[$J]=$1
shift
let OP=1
let J=$J+1
else
echo $1' is not a number'
usage
exit 3
fi
else
if [[ $1 =~ ^[-+/\^\*]{1}$ ]]
then
if [[ $1 =~ ^[\^]{1}$ ]]
then
if ! [[ $2 =~ ^[0-9]+$ ]]
then
echo 'Bad power exponent'
usage
exit 3
fi
let BASE=${ELEMS[$J-1]}
let EX=$2
pow $BASE $EX
let ELEMS[$J-1]=$RES
shift 2
else
if [[ $1 =~ [\*]{1} ]]
then
ELEMS[$J]=\\*
else
ELEMS[$J]=$1
fi
let J=$J+1
shift
let OP=0
fi
else
echo $1' is not an operator'
if [[ $1 =~ ^[0-9]+$ ]]
then
let TMP=${ELEMS[$J-1]}
echo "Are you missing an operator beetwen $TMP and $1?"
fi
usage
exit 3
fi
fi
done
if [ $OP -eq 0 ]
then
echo 'Missing argument after last operator'
usage
exit 3
fi
echo "Calculation: ${ARGS[*]}"
echo -n 'Result: '
expr ${ELEMS[*]}
變化'elems的[$ J] = \\ *''到elems的[$ J] = 「*」' –
當我改變'elems的[$時得到J] = \\ *'到'ELEMS [$ J] =「*」'代替乘法運算符我得到腳本所在目錄中所有文件的列表。所以它就像'expr 2 in out project.sh 2 ' – xartii