- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
关于 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/
我有一个 C 代码,它从输入文件读取参数(启用逐字解析)。 我想通过输入文件输入条件表达式。例如,我应该能够使用像 这样的表达式 x x<1.0 x*x + y*y <1.0 等等,并在我的程序中调用
function Menu(c) { var c = { names: c.names ? c.names : undefined, fonts: c.font
关于 bash 脚本中的 if 语句,我有一个微妙的问题:“if”后面应该有什么类型的括号? 我有两个语句现在都可以工作,但如果我交换 () 和 [] 就不能工作了。 1.比较变量名 NAME="da
我有一个 Observable,我想定期重复,但仅限于以下条件: apiInterface.getData() // returns Observable ... // processing is h
我有一个表需要触发器来维持总行数为 100。触发器的工作方式是一旦有新行插入表中,最旧的行将被删除。显然,在触发器开始工作之前,我需要检查总行数是否已经达到 100。 我考虑过使用WHEN (cond
我有一个名为user的表,我在其中插入了一个类似的值 ($workshop_sales*0.01)+($counter_sales*0.005)+($sub_dealer_sales*0.0075)
我的代码结构如下: def collect_data(text): for line in text: key, match = parse_lines(line) #here
BTEQ 相关问题 - 我正在像这样通过 BTEQ 编制 SP 列表 .compile file=sp1 ; .IF ERRORCODE <> 0 THEN .GOTO SQLERROR; comp
我想获取今天没有 excludeDates 的所有 RecurringEvents。 我有以下型号: 重复事件 const RecurringEvent = sequelize.definge('re
我正在尝试使用 when(),thenReturn() 来测试 if 条件,但是当我运行我的测试用例时,即使我已经模拟了实现该方法的类,它也会让我缺少方法调用。 这是我要模拟的 if 条件
我是一名优秀的程序员,十分优秀!