首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >bash/sh if语句语法

bash/sh if语句语法
EN

Stack Overflow用户
提问于 2010-08-07 21:04:22
回答 3查看 7.1K关注 0票数 7

在我遇到的各种指南和脚本中,人们倾向于使用不同的if语句语法。有什么区别?最佳实践是什么?我相信下面所有的陈述,以及更多的变体,都会返回true:

代码语言:javascript
运行
复制
bar="foo"
if [ "foo" = "foo" ]
if [[ "foo" == $bar ]]
if [ "foo" = "$bar" ]
if [[ "foo" = "$bar" ]]
if [[ "foo" -eq $bar ]]
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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

票数 5
EN

Stack Overflow用户

发布于 2010-08-07 22:05:04

[是一个bash内置的,[[是一个bash关键字。最佳实践是,如果脚本不必与其他shell兼容(例如,如果脚本以#!/bin/bash开头),则始终使用[[,并且仅为了与Bourne shell兼容而使用[。参见http://mywiki.wooledge.org/BashFAQ/031

票数 3
EN

Stack Overflow用户

发布于 2010-08-07 21:30:22

我推荐case/esac。

代码语言:javascript
运行
复制
case "$foo" in
  "bar" ) echo "bar";;
  *) echo "not equal";;
esac

不需要担心不同的语法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3430529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档