我是bash的新手,我正在尝试使用or语句进行两个字符串比较。谁能告诉我我哪里出问题了?
echo $DEVICETYPE
FILEHEADER=ANDROID
if [[ "$DEVICETYPE" == "iPad" ] || ["$DEVICETYPE" == "iPhone" ]];
then
$FILEHEADER = IOS
fi
echo $FILEHEADER
的iPad
安卓
正如其他人提到的那样,我应该指出这一点是为了完整性。该声明:
echo $FILEHEADER = IOS
将仅打印出FILEHEADER
紧随其后的变量的内容= IOS
。这不会做分配。分配是通过变量名如下进行的,不带变量$
。请注意,周围没有空格=
。在您的示例中,它应该是:
FILEHEADER=IOS
关于表达式您的代码:
if [[ "$DEVICETYPE" == "iPad" ] || ["$DEVICETYPE" == "iPhone" ]];
可以替换为:
if [ "$DEVICETYPE" == "iPad" ] || [ "$DEVICETYPE" == "iPhone" ];
您需要卸下外部支架。同样,必须进行微妙的更改。你有["$DEVICETYPE"
你需要后加一个空格[
所以就成了[ "$DEVICETYPE"
。如果要对逻辑表达式进行分组,则可以使用括号,这样就可以用这种方式编写(尽管它不会更改此示例的语义):
if ([ "$DEVICETYPE" == "iPad" ] || [ "$DEVICETYPE" == "iPhone" ]);
如果您只针对bash,则以下更自然的表达方式。不幸的是,这种形式可能无法在其他shell中使用(它的可移植性较差):
if [[ $DEVICETYPE == "iPad" || $DEVICETYPE == "iPhone" ]];
如果您担心运算符优先级,可以随时通过以下方式进行说明:
if [[ ($DEVICETYPE == "iPad") || ($DEVICETYPE == "iPhone") ]];
尽管没有问到,但可能有价值的是认识到可以使用通配符星号(*)来检查以iPhone或iPad开头的任何内容,如本例所示:
if [[ ($DEVICETYPE == "iPad"*) || ($DEVICETYPE == "iPhone"*) ]];
因此,如果DEVICETYPE
isiPhone 2
或iPhone2
oriPad Mini
那么它们也将全部匹配。星号表示与任何其他字符匹配。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句