持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第3天,点击查看活动详情
上讲我们对shell变量有了一定了解,在这过程中我们发现我们给变量赋值用到的全是双引号,但是脚本语言也是语言,怎么能没有单引号呢,下面我们看看这里面的一些小细节,帮助我们在写脚本文件时更好的使用对应格式的字符;
字符比较
通常我们给变量赋值的时候以java举例,可能用单引号传char类型,可能双引号字符串类型,可能没符号的数值类型,shell也存在这三种赋值方式,但shell没有java里面的变量类型,那shell是怎么处理的呢;
1) 单引号' '对应的字符串:
- 所有字符原样输出,单引号字符串中的变量是无效的。
- 字符串中不能出现奇数的单引号(所有语言都不行吧),转义也不行(单引号不可转义)。
- 双引号
" "对应的字符串:
- 可以解析双引号中包含的变量;
- 字符串中可以存在双引号,即该字符可以被转义。
- 没有引号包围的字符串
- 不被引号包围的字符串中出现变量时也会被解析,这一点和双引号
" "包围的字符串一样。 - 字符串中不能出现空格,否则空格后的字符串会作为变量或命令解析。
我们具体看下用例:
我先写这四个,看下运行
#!/bin/bash
i="我们一起\"爬山\"吧"
n='我们一起\'爬山\'吧'
j='我们一起\'爬山吧'
k=我们一起爬山吧 123
echo "i="${i} ",n="${n} ",j="${j} ",k="${k}
这样的话由于n不满足不可转义,j不满足字符串中不能出现奇数的单引号,k不满足不能包含空格,123会无法解析,所以报错,
#!/bin/bash
s="11"
i="我们一起\"爬山\"吧"
n='我们一起'爬山'吧'
j='我们${s}'
k=我们一起爬山吧
echo "i="${i} ",n="${n} ",j="${j} ",k="${k}
去掉后会输出:这里注意下n中间的两个单引号消失了;
i=我们一起"爬山"吧 ,n=我们一起爬山吧 ,j=我们${s} ,k=我们一起爬山吧
对于字符串,shell同样可以操作,比如我们查看该字符长度,如果过长就截取,以免报错,这个功能还是很实用的;下面我们看下我认为我们日常会用到的一些方法吧,还是很简单的,但记不住;
主要说三点,(这些都是固定格式,硬记)
1)计算字符串长度(用**${#}**表示)
#!/bin/bash
ss="我们上学啦"
echo "长度是:"${#ss}
最终输出的是:5
2)提取字符串指定位置的字符(用**${变量名:下标起始位置:截取长度}**)下标由0开始呦;
ss="我们上学啦,真棒哇!"
echo "截取的是:"${ss:2:3}
最终输出的是:截取的是:上学啦;
3)替换目标字符为指定字符(用**${变量名//目标值/指定值}**表示)
ss="我们,上学啦,真棒,哇!你在哪,?"
echo "替换后:"${ss//,/@}
最终输出的是:替换后:我们@上学啦@真棒@哇!你在哪@?;还有很多其他的用法,大家可以继续深入一下,好啦🥗🥗🥗;
结束结束,那就🛴🛴🛴