前言
如果你看别的教程的这几个知识点发现踩坑了不妨看看我这个
笔者最近在学习linux,学习shell基本语法没遇到什么问题,只是感觉和常用编程语言写法相比要特别一些。本来学的挺开心的,知道遇到了(())、(( ))、(())、( )与${ }这几个魔鬼…而笔者查了很多资料后发现都是因为shell和我们常用的java、js、python、c++不同的一个特性,这个特性直接导致,网上教程说的语法是对,但我们拿来用就差错百出。
脱坑指南
1、下面先看看笔者踩的坑
[root@iz2ze80lop6iryuzdxeevwz haha]# $(( $hzhz ))
-bash: 2: command not found
#报错,笑容逐渐消失
[root@iz2ze80lop6iryuzdxeevwz haha]# ` 1 + 1 `
-bash: 1: command not found
#报错,笑容完全消失
[root@iz2ze80lop6iryuzdxeevwz haha]# $( 1 + 1 )
-bash: 1: command not found
#还是报错,心态爆炸
[root@iz2ze80lop6iryuzdxeevwz haha]# fuck=123
#这句运行正常
[root@iz2ze80lop6iryuzdxeevwz haha]# ${fuck}
-bash: 123: command not found
#???心态继续爆炸,设变量名为fuck祭天
[root@iz2ze80lop6iryuzdxeevwz haha]# $(( fuck+1 ))
-bash: 124: command not found
#wtf
2、到底是什么导致笔者上述的异常
因为你没有处理返回值
处理返回值有点抽象,再具象一点讲你们就理解了,你应该echo一下操作的结果。对的,就是这么简单,一个shell命令(比如:$((1+1))
)是有返回值的。$((1+1))
比如它的返回值就是2。
你应该处理下这个返回值。比如将它赋值给一个变量或者用echo来输出它。
我们先看下下面这个例子,以便应证笔者的观点。
[root@iz2ze80lop6iryuzdxeevwz haha]# $fuck
-bash: 2: command not found
[root@iz2ze80lop6iryuzdxeevwz haha]# echo $fuck
2
上面代码说明,$fuck
返回fuck变量的值。但/bin/bash是无法处理这个值的,除非你自己将它打印一下,不然bash就会说,哎呀这是啥,不知道,我就报个错吧。笔者测试过,java、js、python中都可以以一个单独的值作为一行指令,但bash不行,可谓是坑爹至极,所以我们如果使用这些特殊用法拿到值,一定要配合echo使用,对结果进行打印,或者用赋值等操作进行处理,不然就会报错。或许别人没卡在这里只是笔者卡住了,网上别的教程笔者没遇到强调过这个知识点的,所以开个贴,记录一下。
3、笔者还遇到了什么问题
到底怎么计算1+1
echo 1+1
这行代码会输出1+1,所以不是答案
echo `expr 1 + 1`
这样写就可以了,坑点在于,1+1这个计算,必须要用expr声明才会被识别为一个算数运算。所以我们直接echo 1+1
会输出1+1就是因为这个算式被识别为字符串了。
还有需要注意的就是expr
后的算式的操作符必须用空格隔开,如笔者的第三行代码一样
命令替换符${}和``的使用
命令替换符的作用是把命令中某个子命令替换为其执行的结果。
看个例子# expr $fuck + 1是子命令 # $()的作用就是将自命令的结果放在当前位置 echo $(expr $fuck + 1)
loading…