shell之小括号、中括号、大括号(转载)

1、Shell中变量的原形:${var} 一串命令的执行(代替变量)
复制代码
#等价于
$ var=test
$ echo $var
test

#例如,用在这个位置
$ echo v a r A A t e s t A A 复 制 代 码 2 、 命 令 替 换 {var}AA testAA 复制代码 2、命令替换 varAAtestAA2(cmd) 一串命令的执行(替换命令)
命令替换$(cmd)和符号cmd(注意这不是单引号,在美式键盘上,`是ESC下面的那个键)有相同之处

复制代码
$ ls
a b c
$ echo $(ls)
a b c
$ echo ls
a b c
复制代码
我们来分析一下命令echo ( l s ) , 以 便 理 解 所 谓 命 令 替 换 是 什 么 意 思 : s h e l l 扫 描 一 遍 命 令 行 , 发 现 了 (ls),以便理解所谓命令替换是什么意思: shell扫描一遍命令行,发现了 (ls)便shell(cmd)结构,便将$(cmd)中的cmd执行一次,得到其标准输出,再将此输出放到原来命令echo ( l s ) 中 的 (ls)中的 (ls)(ls)位置,即替换了$(ls),再执行echo命令。

()和{}都是对一串的命令进行执行,但有所区别:
A,()只是对一串命令重新开一个子shell进行执行
B,{}对一串命令在当前shell执行

3、POSIX标准的扩展计算: ( ( e x p ) ) 用 于 数 学 计 算 ( 整 数 的 比 较 和 运 算 ) 这 种 计 算 是 符 合 C 语 言 的 运 算 符 , 也 就 是 说 只 要 符 合 C 的 运 算 符 都 可 用 在 ((exp)) 用于数学计算(整数的比较和运算) 这种计算是符合C语言的运算符,也就是说只要符合C的运算符都可用在 ((exp))CC((exp)),甚至是三目运算符。
注意:这种扩展计算是整数型的计算,不支持浮点型.若是逻辑判断,表达式exp为真则为1,假则为0。

复制代码
$ echo $((3+2))
5
$ echo $((3>2))
1
$ echo $((25<3 ? 2:3))
3
$ echo $var

$ echo $((var=2+3))
5
$ echo $var
5
$ echo $((var++))
5
$ echo KaTeX parse error: Can't use function '\(' in math mode at position 39: …对于转义字符要加\ eg:[ \̲(̲INT)]
bash 的内部命令, [ 和 test 是等同的。

Test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。无论是字符串比较还是整数比较都不支持大于号小于号。

因为[ 是Linux内部命令,所以 [ a+b ]之间要有空格。

5、双中括号[[ ]] 不用加斜杠转义eg: [[ ($INT) ]] 较常用
[[是 bash 程序语言的关键字。使用[[ … ]]条件判断结构。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。

4、5例如:

复制代码
if ($i<5)
if [ $i -lt 5 ]
if [ $a -ne 1 -a $a != 2 ]
if [ $a -ne 1] && [ $a != 2 ]
if [[ $a != 1 && $a != 2 ]]

for i in $(seq 0 4);do echo $i;done
for i in seq 0 4;do echo $i;done
for ((i=0;i<5;i++));do echo $i;done
for i in {0…4};do echo $i;done
复制代码
https://my.oschina.net/tridays/blog/807162

最后,推荐使用 [[ 来进行各种判断,这能避免很多错误,比如 $a 为空的情况下,[ $a == 1 ] 就是语法错误,因为 [ 命令拿到的实际上只有 ==、1、] 三个参数。即:[[]]常用些。

$ [ 1 < 2 ]
zsh: no such file or directory: 2
#-------------------------------------
$ [[ 1 < 2 ]] && echo True || echo False
True

首先,来看下shell中$与各种括号的结合:

$( )运行shell命令返回输出

如$(ls -a)

$(( )) 算术运算

( ( (( ((a+$b))

$[] 算术运算

[ [ [a+$b]

${ } 变量调用

KaTeX parse error: Expected '}', got 'EOF' at end of input: {var}

再来看看单独使用的情况:

( ) 正则表达式中可以表示分组,并在后面通过\1,\2等调用

[ ] 测试表达式

[[ ]] 测试表达式

{ }可用于括起整个命令块

实在是不好记,于是,小林君又反过来总结变量调用、命令调用、测试表达式和算术运算的方法:

变量调用:

方法一:${var}

方法二:$var

命令调用:

方法一:COMMAND

方法二:$(COMMAND)

测试表达式:

方法一:[ expression ]

方法二:[[ expression ]]

方法三:test expression

算术运算

方法一:let 算术运算表达式

let C= A + A+ A+B 这里变量A和B前面的$可以省略

方法二:$[算术运算表达式]

C= [ [ [A+$B]

方法三:$((算术运算表达式))

C= ( ( (( ((A+$B))

方法四:expr 算术运算表达式,表达式中各操作数及运算符之间要有空格,而且要使用命令引用,遇到乘法的*号还要转义

C=expr $A + $B

方法五:expr $[算术运算表达式],遇到乘法*号不用转义。

转自:https://www.cnblogs.com/hanggegege/p/5928870.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值