首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在bash中如何使用双括号或单括号、圆括号、花括号

问题 我在使用Bash时,对于括号、圆括号和花括号的用法感到困惑,以及它们的双括号和单括号形式之间的区别。有没有清晰的解释?...回答 方括号 在 Bash 中,test 和括号 [ 是 shell 内置命令。在命令行里 test expr 和 [ expr ] 的效果相同。...此外,在简单的测试中,双方括号的计算速度似乎比单方括号快得多。...花括号 花括号除了用来界定变量名外,还用于参数扩展,因此你可以执行以下操作: •截断变量的内容 •进行类似于 sed 的替换 •使用默认值 •以及更多 此外,花括号扩展可以创建字符串列表,这些列表通常在循环中被迭代...: 请注意,前导零和增量特性在 Bash 4 之前是不可用的。

7400

SHELL编程基本知识点一

如果一个或多个必要的环境变量没被设置的话, 就打印错误信息. "变量扩展/子串替换" 在和 > (重定向操作符)结合使用时,把一个文件截断到 0 长度,没有修改它的权限....#与 cat /dev/null >data.xxx 的作用相同.然而,这不会产生一个新的进程,因为":"是一个内建命令. 在和>>重定向操作符结合使用时,将不会对想要附加的文件产生任何影响....在 file globbing 中和在正则表达式中一样匹配任意的单个字符. $ 变量替换;在正则表达式中作为行结束符. ${} 参数替换 $*,$@ 位置参数 $?...{txt,backup} # 拷贝"file22.txt" 到"file22.backup"中 一个命令可能会对大括号中的以逗号分割的文件列表起作用[1]. file globbing 将对 大括号中的文件名作扩展...注意: 在大括号中,不允许有空白,除非这个空白是有意义的.

93320
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Linux Bash脚本15分钟进阶教程

    脚本函数 在bash里你可以定义函数,它们就跟其它命令一样,可以随意的使用;它们能让你的脚本更具可读性: ExtractBashComments() { egrep "^#" } cat myscript.sh...)替代[] 使用[[]]能避免像异常的文件扩展名之类的问题,而且能带来很多语法上的改进,而且还增加了很多新功能: 操作符 功能说明 || 逻辑or(仅双中括号里使用) && 逻辑and(仅双中括号里使用...) 中括号里不需要转移) -lt 数字比较 = 字符串相等 == 以Globbing方式进行字符串比较(仅双中括号里使用,参考下文) =~ 用正则表达式进行字符串比较(仅双中括号里使用...}" > "a" && "${name}" < "m" ]] 正则表达式/Globbing 使用双中括号带来的好处用下面几个例子最能表现: t="abc123" [[ "$t" == abc* ]]...$@能够处理空格参数,而且参数间的空格也能正确的处理。 使用$@时应该用双引号括起来,像”$@”这样。

    1.1K00

    Linux Bash脚本15分钟进阶教程

    还要注意的是,在“errexit”模式下,虽然能有效的捕捉错误,但并不能捕捉全部失败的命令,在某些情况下,一些失败的命令是无法检测到的。(更多细节请参考这个帖子。)...脚本函数 在bash里你可以定义函数,它们就跟其它命令一样,可以随意的使用;它们能让你的脚本更具可读性: ExtractBashComments() { egrep "^#" } cat myscript.sh...单中括号: [ "${name}" \> "a" -o ${name} \< "m" ] 双中括号 [[ "${name}" > "a" && "${name}" < "m" ]] 正则表达式/Globbing...使用双中括号带来的好处用下面几个例子最能表现: t="abc123" [[ "$t" == abc* ]] # true (globbing比较) [[ "$t" == "abc*"...提示 使用$*很少是正确的选择。 $@能够处理空格参数,而且参数间的空格也能正确的处理。 使用$@时应该用双引号括起来,像”$@”这样。

    1.5K60

    Linux Shell 中的 ()、(())、]、{} 怎么用是不是还傻傻分不清?

    再如可以直接使用if (($i使用双括号, 则为if [ $i -lt 5 ]。 二、中括号,方括号[] 1、单中括号 [] ①bash 的内部命令,[和test是等同的。...在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。 ②支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。...、花括号 {} 1、常规用法 ①大括号拓展。...(通配(globbing))将对大括号中的文件名做扩展。在大括号中,不允许有空白,除非这个空白被引用或转义。第一种:对大括号中的以逗号分割的文件列表进行拓展。...对{}和()而言, 括号中的重定向符只影响该条命令, 而括号外的重定向符影响到括号中的所有命令。

    4.1K20

    shell中各种括号的作用()、(())、]、{}「建议收藏」

    二、中括号,方括号[] 1、单中括号 [] ①bash 的内部命令,[和test是等同的。如果我们不用绝对路径指明,通常我们用的都是bash自带的命令。...用作正则表达式的一部分,描述一个匹配的字符范围。作为test用途的中括号内不能使用正则。 ④在一个array 结构的上下文中,中括号用来引用数组中每个元素的编号。...在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。 ②支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。...(通配(globbing))将对大括号中的文件名做扩展。在大括号中,不允许有空白,除非这个空白被引用或转义。第一种:对大括号中的以逗号分割的文件列表进行拓展。...对{}和()而言, 括号中的重定向符只影响该条命令, 而括号外的重定向符影响到括号中的所有命令。

    4K40

    《Linux操作系统编程》第七章 shell的交互功能: 了解shell的启动过程,shell的功能,shell的命令形式,shell程序的建立和运行,理解管道和重定向,环境变量和系统变量以及变量引用

    , 不覆盖filename (4) 标准错误输出重定向 command 2> filename 进程运行中的错误信息重定向到文件filename。...在 bash 环境下,输入 help 命令(这也是一条内部命令),就可列出bash的所有内部命令。...▪ 单引号、双引号、反撇号和花括号为shell的引用符。 ▪ 特殊字符是指那些既可代表字符本身又可解释为其他意思的字符。...执行时,未替换变量 a的值 c=“The value of a is a” echo c The value of a is he is a student (2) 反撇号 反撇号( ` )的作用就是把包括在反撇号中的字符串作为命令来执行...(3) 花括号 花括号({和})的功能就是把变量名与后面紧跟的其他字符区分开来。

    27310

    linux bash shell 特殊字符大全

    /bin/bash; 2. 其他地方作为注释使用,在一行中,#后面的内容并不会被执行,除非; 3. 但是用单/双引号包围时,#作为#号字符本身,不具有注释作用。...在参数替换中为字符串变量赋值,在重定向操作(>)中,把一个文件长度截断为0(:>>这样用的时候,目标存在则什么都不做),这个只能在普通文件中使用,不能在管道,符号链接和其他特殊文件中使用; 5....注意的一点是,这花括号扩展中不能有空格存在,如果确实有必要空格,则必须被转义或者使用引号来引用。...在参数替换中为字符串变量赋值,在重定向操作(>)中,把一个文件长度截断为0(:>>这样用的时候,目标存在则什么都不做),这个只能在普通文件中使用,不能在管道,符号链接和其他特殊文件中使用; 5....注意的一点是,这花括号扩展中不能有空格存在,如果确实有必要空格,则必须被转义或者使用引号来引用。

    6.6K30

    shell脚本编程之路1

    in {0..4},再如 if((i使用双括号,则为if[i使用双括号,则为if[i -lt 5 ] 3.单中括号,方括号[] bash 的内部命令: [和test是等同的...在一个array 结构的上下文中,中括号用来引用数组中每个元素的编号,如a[1] 4.双中括号,方括号[[]] [[是 bash 程序语言的关键字: 它并不是一个命令,[[ ]] 结构比[ ]结构更加通用...、花括号 {} 常规用法: 大括号拓展:通配(globbing))将对大括号中的文件名做扩展。...,加花括号是为了帮助解释器识别变量的边界; (2)(cmd) 命令替换,和cmd效果相同,结果为shell命令cmd的输,过某些Shell版本不支持()形式的命令替换, 如tcsh。...对{}和()而言, 括号中的重定向符只影响该条命令而括号外的重定向符影响到括号中的所有命令。

    2.7K20

    shell中的括号(小括号,中括号,大括号)

    一、小括号,园括号()   1、单小括号 ()     ①命令组。括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用。...用作正则表达式的一部分,描述一个匹配的字符范围。作为test用途的中括号内不能使用正则。     ④在一个array 结构的上下文中,中括号用来引用数组中每个元素的编号。  ...在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。     ②支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。...三)大括号、花括号 {}   1、常规用法。     ①大括号拓展。(通配(globbing))将对大括号中的文件名做扩展。在大括号中,不允许有空白,除非这个空白被引用或转义。...这四种模式中都不会改变variable的值,其中,只有在pattern中使用了*匹配符号时,%和%%,#和##才有区别。

    3.9K10

    Shell Style Guide

    当使用命令替换进行赋值时,变量声明和赋值必须分开。因为内建的 local 不会从命令替换中传递退出码。...{ list; } 在花括号之间放置一个命令列表将导致该列表在当前shell上下文中执行。不创建子shell。必须在列表后面使用分号(或换行符)。...当花括号与list在同一行时,必须使用分号和空格隔开。 循环 将 ; do , ; then 和 while , for , if ,elif 放在同一行。另 else 应该单独一行。...反例: # 以下设置的内容及成功与否并不明确 eval $(set_my_variables) 慎用管道连接while循环 使用进程替换或者for循环,而不是通过管道连接while循环。...例如: total=0 # 仅当返回结果中无空格等特殊符号时以下可正常执行: for value in $(command); do total+="${value}" done 使用进程替换可实现重定向输出

    7.5K10

    命令注入限制绕过

    $(command2) 下面给出一个具体的执行示例: ()和{} 在Linux命令行中括号()和花括号{}是用来进行命令分组、子shell执行或参数替换的符号 1、括号() 命令分组:括号中的命令会作为一个独立的子进程在一个子...shell 中执行 变量赋值:可以将括号中的命令的输出结果赋值给变量 下面的示例中command1和command2是两个不同的命令,通过将这两个命令放置在括号()中,它们会作为一个独立的子进程在一个子...shell中执行 (command1; command2) 执行示例如下: 2、花括号{} 花括号扩展:花括号中可以包含一个或多个值并以逗号分隔,在命令行中花括号会展开成多个值用于生成多个命令或参数的组合...$IFS$1flag.txt 思路2:重定向类 在进行命令注入时如果过滤了空格我们可以使用重定向进行替换,相关的示例及变形如下所示: cat<flag.txt catflag.txt 思路2:花括号类...在进行命令注入时如果过滤了空格我们可以使用花括号进行替换,相关的示例及变形如下所示: {cat,flag.txt} 思路3:十六进制 在进行命令注入时如果过滤了空格我们可以使用十六进制进行替换,相关的示例如下所示

    48210

    15分钟bash进阶

    (更多信息可以参考这篇文章) 一位读者还推荐另一个用法set -o pipefail 函数 在Bash中你可以定义其它函数,它们和其它命令一样—你可以随意调用它们;这也会让你的脚本更具可读性。...) Meaning(含义) 逻辑或 && 逻辑与 中括号中不需要转义) -lt 数字比较 = 字符串比较 == 以globbing的方式比较字符串,见下文 (仅双中括号有效) =~..."m" ] 双中括号: [[ "${name}" > "a" && "${name}" < "m" ]] 正则和Globbing 以下几个例子能够体现出双中括号的强大能力: t="abc123" [...-n myscript.sh 跟踪脚本里每个命令的执行: bash -v myscript.sh 跟踪脚本里每个命令的执行并附加扩充信息: bash -x myscript.sh 你可以在脚本头部添加...注意bash中的正则和globbing的区别。

    1.5K31

    Shell 编程入门 (转载非原创)

    echo $content echo ${content} 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界。 content="hello world!"...推荐给所有变量加上花括号,这是个好的编程习惯。 已定义的变量,可以被重新定义,如: content="hello world!"...1、 定义数组 在 shell 中,用括号来表示数组,数组元素用"空格"符号分割开。...函数脚本执行结果: -----函数开始执行----- 这是我的第一个 shell 函数! -----函数执行完毕----- 2、 函数参数 在 shell 中,调用函数时可以向其传递参数。...后台运行的最后一个进程的ID号 $@ 与$*相同,但是使用时加引号,并在引号中返回每个参数。 $- 显示Shell使用的当前选项,与set命令功能相同。 $? 显示最后命令的退出状态。

    1.7K21

    Linux 之 shell 比较运算符

    -b文件名 如果文件存在且为块特殊文件则为真 条件变量替换:     Bash Shell可以进行变量的条件替换,既只有某种条件发生时才进行替换,替换  条件放在{}中....  (2) ${value:=word}         与前者类似,只是若变量未定义或者值为空时,在返回word的值的同时将 word赋值给value  (3) ${value:?...string的内容,/与//的区别与上同  注意: 上述条件变量替换中,除(2)外,其余均不影响变量本身的值 #!...else echo "$a2不是$a3的子串!" fi 注意: 使用-n在[]结构中测试必须要用""把变量引起来.使用一个未被""的字符串来使用!...-z或者就是未用""引用的字符串本身,放到[]结构中。虽然一般情况下可以工作,但这是不安全的.习惯于使用""来测试字符串是一种好习惯.

    1.6K10

    Shell脚本学习1

    echo加了-e默认会换行 echo arg > myfile #显示结果重定向至文件,会生成myfile文件 注意: echo后单引号和双引号作用是不同的 单引号不能转义里面的字符,双引号可有可无,单引号主要用在原样输出中...(a-z,A-Z) 中间不能有空格,可以使用下划线(_) 不能使用标点符号 不能使用bash里的关键字(可用help命令查看保留关键字) 使用变量:在变量名前面加美元符号($)即可...your_name="ll" echo $your_name echo ${your_name} 变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界 for skill in...:局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启动的程序不能访问局部变量。...$* 传递给脚本或函数的所有参数。 $@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与 $* 稍有不同 $? 上个命令的退出状态,或函数的返回值。 $$ 当前Shell进程ID。

    31920

    笨办法学 Linux 4~7

    Bash 仅仅接受花括号前的一个参数,在我们的例子中是.bash_history,并向参数添加花括号里的所有东西,以逗号分隔,并以此作为参数。...尝试使用花括号键入几个单独的参数。 使用 Google 搜索 bash 花括号扩展,从搜索结果中打开“Bash 参考手册”,并阅读相应的部分。 尝试弄清楚ls .*如何和为什么工作。...将foo变量的内容重定向到foo.out文件,在进程中创建文件或覆盖现有文件,而不会警告删除所有内容! 打印出foo.out的内容。...将foo变量的内容重定向到foo.out文件,在进程中创建文件或附加 到现有文件。这是安全的,但不要混淆这两者,否则你会有巨大的悲剧。 再次打印出foo.out内容。...将空内容重定向到foo.out,在进程中清空文件。 显示文件确实是空的。 列出你的目录并将其通过管道输出到grep。它的原理是,获取所有ls -al的输出,并将其扔给grep。这又称为管道。

    73910

    日拱一卒,麻省理工教你CS基础,那些酷炫无比的命令行工具

    正常grep找到之后的结果会输出到stdout,这里我们给它重定向到了/dev/null,这是Linux系统中的一个特殊文件,输入的数据都会丢弃。...如果grep语句没有找到一条吻合的文本,那么会生成一个错误码。为了不让错误码影响程序的运行,我们把错误码也重定向到了/etc/null,错误码重定向使用的是2>。 在比较的时候,我们判断了$?...在bash中进行比较的时候,使用双方括号[[ ]]而非单括号[]。这样会降低犯错的几率,虽然它对于sh来说不是很便携。大家可以查阅一下这两者的区别。...将会删除foo1, foo2而rm foo*将会删除除了bar之外所有的 花括号{} - 当你的命令拥有一系列共同的单词时,你可以使用花括号来扩展。尤其是移动或者是转变文件的时候。...在脚本当中写入shebang是一个很好的习惯,当你不确定命令调用的程序在什么位置时,可以使用env命令,可以增加你的脚本的可移植性。 env将会使用我们上节课提到的PATH环境变量来寻找合适的程序。

    1.6K40

    大数据学习之Linux基础

    # 1.使用普通重定向 ,会发现不会出现错误音效(图3) ,原因是在执行ls时, 首先会扫描文件是否存在 ,然后输出文件信息将原来的错误信息 # 2.因此, 如果使用追加重定向时 ,无论顺序如何 ,都会首先打印错误信息...注意: test 应该总是包围在花括号中。如果不是,在 while 命令开始执行之前 将 进 行变量替换,这意味着循环体所做的变量变更将不考虑在这个表达式中。...如果 test 被包围在花括号中,变量替换被推迟到求值这个 表 达 式的时候(在每次循环重复操作之前),所以变量的变化将是可见的。...注意: test 应当总是在花括号中包围着。如果不是这样,在 for 命令开始之前就 作了变量替换,这意味着在循环体中做的变量变更在表达式中将不被考虑。...如果 test 被包围在花括号中,变量替换将延迟,直到表达式求 值(在每次循环重复之前),所以变量的变更将是可见的。

    1.4K40

    Bash概论 - Linux系列教程补充篇

    本篇是我最开始学习Linux命令时看的一篇帖子,最早见于ChinaUnix (这次查找其出处时发现2002年就有这篇)。学习过程中,遇到问题就查一下。...花括号展开式(可以嵌套): c{a{r,t,n}, b{r,t,n}}s 可以匹配cars cats cans cbrs cbts cbns 4....引用变量有两种方式, {varname}, 为防止变量在字符串中产生歧义建议使用第二种方式, 引用未定义的变量其值为空。...; do j=${i/_1.fq.gz/}; echo "$j"; done Shell中条件和test命令 Bash可以使用[ … ]结构或test命令测试复杂条件格式: [ expression ]..., 则读取参数到内置变量OPTARG中 内置变量OPTIND保存着将被处理的命令行参数(位置参数)的数值选项列表处理完毕getopts返回1, 否则返回0 如: 在我们推出的一步绘图脚本里面,就是使用Bash

    1.2K70
    领券