如何在 shell 中的字符串中输入星号 *

如何在 shell 中的字符串中输入星号 *

我怎样才能将其包含*在字符串中?

这是我的代码:

#!/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

相关内容