Я просто столкнулся с проблемой, когда я пытался присвоить значение переменной внутри сазе, вот мой код:Невозможно присвоить значение переменной в случае заявления в Баш
#!/bin/bash
while getopts ":m:n:::" opt; do
case $opt in
n)
echo "-n was triggered, Parameter: $OPTARG " >&2
case $OPTARG in
t)
echo threads
r=threads
;;
p)
echo processes
r="something"
;;
esac
;;
m)
echo "-m was triggered, Parameter: $OPTARG" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
exit 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
exit 1
;;
esac
done
echo $r
echo No thread/processes: $2 P/T: $4 IF: $5 OF: $6
Я бы хотел использовать переменную $r
позже, но я не могу. Когда я пытаюсь распечатать его, используя echo
(как и в моем скрипте), он ничего не возвращает. Я пытался определить свою ошибку, но не смог. Существует аналогичное сообщение, в котором предлагается удалить пробелы до и после =
, но, как вы можете видеть, в моем месте нет пробелов.
Вот что я получаю от консоли, когда я запускаю его:
$ ./friendfind -n 2 -m p IN OUT
-n was triggered, Parameter: 2
-m was triggered, Parameter: p
No thread/processes: 2 P/T: p IF: IN OF: OUT
Цель сценария была запустить файл переменного тока с возможностью его запуска с потоками или процессами, поэтому он просит для количество процессов/потоков, которые вы хотите использовать, если вы хотите использовать процессы или потоки и файл ввода и вывода.
'r' будет установлен только если вызов включает в себя' -nt' или '-np'. У вас есть '-n 2', поэтому' r' просто не будет установлен. Возможно, вы забыли случай по умолчанию во внутреннем случае? В противном случае объясните, почему вы ожидаете установки 'r'. – rici
Кроме того, что вы ожидаете от трех двоеточий в конце строки опций? – rici
Огромное вам спасибо, и жаль, что задал такой тупой вопрос. Я пытался получить более одного аргумента, но теперь я чувствую, что это тоже неправильно. – Stieg