我有以下行可以正常工作:
while getopts :t t; do case $t in t) echo $t; break; esac; done
但是,当我尝试将其用作命令替换时,bash 失败并出现错误。
代码:
#!/usr/bin/env bash
echo $BASH_VERSION
[ "$(while getopts :t t; do case $t in t) echo $t; break; esac; done)" = "t" ] && echo "Option specified."
结果:
$ ./test.sh -a -b -c -t
4.3.42(1)-release
./test.sh: line 3: unexpected EOF while looking for matching `"'
./test.sh: line 4: syntax error: unexpected end of file
反斜杠没有帮助\)
。t)
语法在 GNU bash 3.2.57(t)
中有效,但在 4.3.42 中无效。
似乎使用反引号对两个版本都适用:
[ "`while getopts :t t; do case $t in t) echo $t; break; esac; done`" = "t" ] && echo "Option specified."
但是我不想使用该语法,因为它已弃用。
如何case
在上述命令替换 ( $()
) 中使用语法?
或者也许还有其他方法可以做同样的事情?
基本上是检查是否-t
已经为脚本指定了参数,如果是,则执行一些命令。