Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
BASH中if with or语句和elif语句的区别_Bash_Performance_Shell - Fatal编程技术网

BASH中if with or语句和elif语句的区别

BASH中if with or语句和elif语句的区别,bash,performance,shell,Bash,Performance,Shell,我只是好奇以下两者之间的区别: if [[ "${foo}" == 'bar' || "${foo}" == 'bar1' ]]; then echo "Action" fi 以及: 有什么不同吗?速度代码可读性的首选性。。等等 谢谢您的第一条语句的更直接(仍然符合POSIX)版本是 if [ "${foo}" = 'bar' ] || [ "${foo}" = 'bar1' ]; then echo "Action" fi 第二个是不必要的冗长 在bash中,这两个命令几乎

我只是好奇以下两者之间的区别:

if [[ "${foo}" == 'bar' || "${foo}" == 'bar1' ]]; then
    echo "Action"
fi
以及:

有什么不同吗?速度代码可读性的首选性。。等等

谢谢

您的第一条语句的更直接(仍然符合POSIX)版本是

if [ "${foo}" = 'bar' ] || [ "${foo}" = 'bar1' ]; then
    echo "Action"
fi
第二个是不必要的冗长

bash
中,这两个命令几乎没有区别,因为
[
是一个内置命令。

您的第一个语句的更直接(仍然符合POSIX)版本是

if [ "${foo}" = 'bar' ] || [ "${foo}" = 'bar1' ]; then
    echo "Action"
fi
第二个是不必要的冗长



这两者在
bash
中几乎没有区别,正如
[
是一个内置命令。

是否有更好的方法来做同样的事情,如果有,它是什么,如何做的更好?另请参见:bash中的case/esac。第一种方法不要求您复制您的操作,因此可能更可取,因为如果没有其他方法有意义,Eric!是否有更好的方法来做同样的事情,如果有,它是什么,以及如何更好呢?另请参见:bash中的case/esac。第一种方法不需要你重复你的操作,因此如果没有其他方法是有意义的,那么可能更可取Eric!因此,出于好奇,另一个问题……直到最好使用elif或甚至switch之前,一个人可以在其中输入多少个参数?我一直听说一个人应该使用开关(外壳)如果有5个以上的参数..您在其中留下了一个双括号。如果要采取的操作不同,我只会使用
case
elif
,而不是简单地打破一个长的析取条件。如果有很多类似的条件,我会寻找一种方法来概括测试。例如,在这里,您可以使用
if[[foo=~bar1?]];然后
而不是两个单独的测试。好吧,这个想法就像是
如果[[$variable=='jdk6-maven'| |$variable==='jdk7-maven'| |$variable=='jdk8-maven']];然后
[$variable==jdk[678]-maven]]
那么,出于好奇,还有一个问题..在最好使用elif甚至switch之前,一个人可以在其中输入多少个参数?我一直听说一个人应该使用switch(case)如果有5个以上的参数..您在其中留下了一个双括号。如果要采取的操作不同,我只会使用
case
elif
,而不是简单地打破一个长的析取条件。如果有很多类似的条件,我会寻找一种方法来概括测试。例如,在这里,您可以使用
if[[foo=~bar1?]];然后
而不是两个单独的测试。好吧,这个想法就像是
如果[[$variable=='jdk6-maven'| |$variable==='jdk7-maven'| |$variable=='jdk8-maven']];然后
[$variable==jdk[678]-maven]