在我遇到的各种指南和脚本中,人们倾向于使用不同的if语句语法。有什么区别?最佳实践是什么?我相信下面所有的陈述,以及更多的变体,都会返回true:
bar="foo"
if [ "foo" = "foo" ]
if [[ "foo" == $bar ]]
if [ "foo" = "$bar" ]
if [[ "foo" = "$bar" ]]
if [[ "foo" -eq $bar ]]
发布于 2010-08-07 21:32:20
据我所知
=需要字符串
-eq需要整数
"$bar“用于文字匹配,即z*可以展开,但"z*”将按字面匹配通配符。
[]和[[]]的不同之处在于,在后者中,拆分和路径名扩展没有完成,而是在前者中。
加号[[]]允许附加的运算符:
&& (AND),|| (OR),> (String1词法大于String2),< (String1词法小于String2)
==比较运算符在双括号测试中的行为与在单括号测试中的行为不同。
[ $a == z* ]#如果$a以"z“(模式匹配)开头,则为True。
[ $a == " z*“]#如果$a等于z*,则为True。
$a == z* #进行文件全局合并和单词拆分。
" $a“== " z*”#如果$a等于z*(文字匹配),则为True。
有关更多信息,请查看http://tldp.org/LDP/abs/html/comparison-ops.html
发布于 2010-08-07 22:05:04
[
是一个bash内置的,[[
是一个bash关键字。最佳实践是,如果脚本不必与其他shell兼容(例如,如果脚本以#!/bin/bash
开头),则始终使用[[
,并且仅为了与Bourne shell兼容而使用[
。参见http://mywiki.wooledge.org/BashFAQ/031。
发布于 2010-08-07 21:30:22
我推荐case/esac。
case "$foo" in
"bar" ) echo "bar";;
*) echo "not equal";;
esac
不需要担心不同的语法。
https://stackoverflow.com/questions/3430529
复制相似问题