我是bash的新手,我正在尝试使用or语句进行两次字符串比较。任何人都可以告诉我哪里出错了?
echo $DEVICETYPE
FILEHEADER=ANDROID
if [[ "$DEVICETYPE" == "iPad" ] || ["$DEVICETYPE" == "iPhone" ]];
then
$FILEHEADER = IOS
fi
echo $FILEHEADER
ipad公司
机器人
答案 0 :(得分:2)
正如其他人所说,我应该指出这一点是完整的。声明:
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
为iPhone 2
或iPhone2
或iPad Mini
,那么它们也会匹配。星号表示匹配任何其他字符。