Назад | Перейти на главную страницу

Как ввести звездочку * внутри строки в оболочке

Как я могу включить * внутри строки?

Вот мой код:

#!/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 выбор. Я пытался сбежать с \* но это не работает.

Расширяет свои параметры. Но потом select тоже расширяет свои параметры. Оболочка расширяется \* чтобы просто *, что не помогает, так как select затем расширяет это *. Вам нужно что-то, что расширяется до \*, что было бы \\*.

В качестве альтернативы просто используйте:
select op in + - \* /;
или:
select op in "$operators"

Сначала вы можете поместить оператор $ в двойные кавычки, чтобы убедиться, что нет интерпретации. Правильно выберите отображение списка параметров. Кстати, конец кода работает не так, как ожидалось: он отображает первый и второй операнды, но не оператор

Массивы довольно часто помогают при написании сценариев оболочки, когда вы испытываете трудности с использованием строки, которую вы создали динамически.

$ 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