Bash getopts截断参数值
我需要在myscript.sh中传递一个包含空格as选项的字符串值 代码如下所示:Bash getopts截断参数值,bash,shell,getopts,Bash,Shell,Getopts,我需要在myscript.sh中传递一个包含空格as选项的字符串值 代码如下所示: while getopts "m:i:t:" OPTION do case $OPTION in m) M=$OPTARG echo M: $M ;; i) I=$OPTARG echo I: $I ;; t) T=$OPTARG echo
while getopts "m:i:t:" OPTION
do
case $OPTION in
m)
M=$OPTARG
echo M: $M
;;
i)
I=$OPTARG
echo I: $I
;;
t)
T=$OPTARG
echo T: $T
;;
?)
usage
exit
;;
esac
done
当我直接在命令行上调用它时,它工作正常:
./myscript.sh -m 1 -i '0 1 2 3' -t '2142'
M: 1
I: 0 1 2 3
T: 2142
但是,我需要将-I作为字符串变量传递,因此无法使其工作。选项-i的字符串被截断,选项-t甚至没有通过(可能是新行)
有什么建议吗?谢谢 当你试图运行它时,为什么要这样引用?我很确定这就是你想做的:
./myscript.sh -m 1 -i "$I" -t 2142
双引号将其中的所有字符都视为文字,除了允许展开变量的少数内容,包括$
。单引号也会停止变量扩展。它们各自保护另一种类型的引号,因此,“
只是一个”
字符,“
只是一个”
字符
这意味着,
““$I””
将变成“0 1 2 3”
,对单引号没有特殊意义,对空格也没有保护-您也可以将其写成\'0 1 2 3\
。未受保护的空格将单词分开,因此第一个单词是\'0
。因此,脚本将其视为选项的值,将1
、2
和3'
视为额外参数。如果在while循环之后添加shift$((OPTIND-1))
以移开已解析的选项,然后在选项解析之后添加echo“arguments:$@”
,则可以看到这一点。您还将看到,由于getops
希望前面的所有选项都在一起,这导致您错过了-t
选项,并将其视为一个参数。+1您是对的,我犯了一个错误,呵呵。我将我的标记为删除,因为它是错误的。很高兴我能帮上忙!听起来你至少有很好的直觉:如果你看到有东西在空格上分裂,那可能是引用的问题。
./myscript.sh -m 1 -i "$I" -t 2142