在我遇到的各种指南和脚本中,人们倾向于使用if语句的不同语法。有什么区别,什么是最佳实践?我相信以下所有陈述以及更多变体都会返回true:
bar="foo"
if [ "foo" = "foo" ]
if [[ "foo" == $bar ]]
if [ "foo" = "$bar" ]
if [[ "foo" = "$bar" ]]
if [[ "foo" -eq $bar ]]
答案 0 :(得分:5)
据我了解
=期待字符串
-eq需要整数
“$ bar”用于文字匹配,即z *可以展开,但“z *”将与通配符字符匹配。
[]和[[]]之间的区别在于,在后一个单词中,拆分和路径名称扩展没有完成,但是在前者中。
加[[]]允许其他操作符:
&安培;&安培; (和), || (要么), > (String1在词法上大于String2), < (String1在词法上小于String2)
==比较运算符在双括号测试中的行为与单括号内的行为不同。
[[$ a == z *]]#如果$ a以“z”开头(模式匹配),则为真。
[[$ a ==“z *”]]#如果$ a等于z *(文字匹配),则为真。
[$ a == z *] #File globbing and word splitting。
[“$ a”==“z *”]#如果$ a等于z *(字面匹配),则为真。
答案 1 :(得分:3)
[
是内置的bash,[[
是一个bash关键字。如果脚本不必与其他shell兼容(例如,如果它以[[
开头),则最佳做法是始终使用#!/bin/bash
,并且仅使用[
来兼容Bourne shell。请参阅http://mywiki.wooledge.org/BashFAQ/031。
答案 2 :(得分:2)
我推荐case / esac。
case "$foo" in
"bar" ) echo "bar";;
*) echo "not equal";;
esac
不要担心不同的语法。