【发布时间】:2015-05-15 02:45:00
【问题描述】:
我在尝试为 case 语句中的变量赋值时遇到了一个问题,这是我的代码:
#!/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
该脚本的目的是运行一个 c 文件,并选择使用线程或进程运行它,因此它会询问您要使用的进程/线程数,如果您想使用进程或线程以及输入输出文件。
【问题讨论】:
-
r将仅在您的调用包含-n t或-n p时设置。你有-n 2,所以r根本不会被设置。也许您在内部 case 语句中忘记了默认情况?否则,请解释为什么您希望设置r。 -
另外,你希望选项字符串末尾的三个冒号做什么?
-
非常感谢,也很抱歉提出这么愚蠢的问题。我试图获得不止一个论点,但现在我觉得这也是错误的方式。
-
该脚本的目的是运行一个 c 文件,并选择使用线程或进程运行它,因此它会询问您要使用的进程/线程数,如果您想使用进程或线程以及输入和输出文件。
-
好的,我添加了一个答案。现在你可以编辑你的问题,让答案适合:)
标签: bash unix variable-assignment