我怎样才能将其包含*
在字符串中?
这是我的代码:
#!/bin/bash
# This is a simple calculator using select statement
echo -n 'Insert 1st operand: '
read first
echo -n 'Insert 2nd operand: '
read second
echo 'Select an operator:'
operators="+ - * /"
select op in $operators
do let "result=${first}${op}${second}"
break
done
echo -e "Result = $result"
当我运行此代码时,*
将列出当前目录中的所有文件作为select
选项。我尝试使用 退出,\*
但没有成功。
答案1
shall 扩展了它的参数。但随后select
也扩展了它的参数。shell 扩展\*
为*
,这没有帮助,因为select
扩展了*
。您需要一个可以扩展为 的东西\*
,也就是\\*
。
或者,只需使用:
select op in + - \* /;
或:
select op in "$operators"
答案2
首先,您可以将 $operator 放在双引号中,以确保没有解释。选择正确显示参数列表,顺便说一句,代码结尾没有按预期工作:它显示第一个和第二个操作数,但不显示运算符
答案3
当您在使用动态构造的字符串时遇到困难时,数组通常会在 shell 脚本中提供帮助。
$ operators=( + - '*' / )
$ PS3="choice? "
$ select o in "${operators[@]}"; do echo "$o $REPLY"; done
1) +
2) -
3) *
4) /
choice? 1
+ 1
choice? 2
- 2
choice? 3
* 3
choice? 4
/ 4