gpt4 book ai didi

linux - bash 脚本 : if use with (conditon) or [condition]

转载 作者:太空宇宙 更新时间:2023-11-04 11:02:36 24 4
gpt4 key购买 nike

关于 bash 脚本中的 if 语句,我有一个微妙的问题:“if”后面应该有什么类型的括号?

我有两个语句现在都可以工作,但如果我交换 () 和 [] 就不能工作了。

1.比较变量名

NAME="dada"
if [ "$NAME" == "dada" ]; then SOME COMMANDS; fi

如果把[]改成(),报错:

dada: command not found

2.使用grep

if ( grep -q "lalala" mytest.txt ); then SOME COMMANDS; fi

如果将()改成[],错误:

[: lalala: binary operator expected

我读了 linux man,建议使用 []。那么是因为使用了grep吗?是不是一般来说如果在if里面用别的程序,就应该用()?

关于双引号的附带问题,是否有必要在 shell 中引用文本?例如,回显“$NAME”或 NAME="fadfaj"?

我很困惑,因为当我尝试使用 $NAME 加上一些特殊字符(例如“_”或空格)时,我需要使用“\”,但在有和没有“”的情况下会出现不同的行为。

NAME="myfolder"
echo $NAME\_na
echo "$NAME\_na"

输出

myfolder_na
myfolder\_na

我知道这些都是天真的问题,但我非常感谢您的帮助!

最佳答案

if 关键字后面的是一个命令。命令被执行,如果命令成功则条件为真(退出状态为0),如果失败则为假。

虽然它看起来像 shell 语法,但 [ 符号实际上是一个命令的名称(恰好内置在 shell 中)。例如,您可以键入

[ "$NAME" = "dada" ]

在没有 if 的 shell 提示符下,它会评估相同的条件并设置 $?。您也可以这样做:

[ "$NAME" = "dada" ] && echo Yes

][ 命令的必需最后一个参数。除了这个要求,[ 命令等同于 test 命令:

if test "$Name" = "data" ; then echo yes ; fi

请注意,我使用的是 = 而不是 ==。 bash 中内置的 test/[ 命令可以识别任何一种形式,但是 = 是原始语法,有些实现不识别 ==

[ 是最常用于 if 的命令,但您可以使用任何命令,包括 `grep:

if grep -q "lalala" mytest.txt; then SOME COMMANDS; fi

括号是不必要的。 (如果添加它们,您使用的是复合命令而不是简单命令;没有必要这样做。)

有关更多信息,请参阅 bash 手册 (info bash)。搜索

`test'

(带有反引号和撇号)有关内置 test 命令的信息。

Bash 还有一个 [[ 命令,它比旧的 [ 有一些优势。

关于linux - bash 脚本 : if use with (conditon) or [condition],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26394093/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com