Linux 变量操作

一、 首先算是变量的编辑吧:

1. 变量字符匹配删除输出。   2. 变量字符固定偏移并截出字符。

3. 变量字符的替换。

1.  举一个例子先: 关于#号的。  ${变量#匹配字符}

$ do="Hello World"

$ echo $do

Hello World

$ echo ${do#He}

llo World

$ echo ${do#*l}

lo World

#号在上面那种变量应用中,把左边变量的值,按右边的字符串从左到右最短区配

所区配到的字符删除输出。 支持通配符。

$ echo ${do##*l}
d

##号,这个则就是最长区配了。   记住是从左到右的区配顺序。

再来一个例子: 关于%号的。  ${变量%匹配字符}

$ echo $do

Hello World

$ echo ${do%ld}

Hello Wor

$ echo ${do%o*}

Hello W

%号跟上面#号的形式都一样,只不过是从右到左的匹配。 同样的一个%号是 最短区配。 

$ echo ${do%%o*}

Hell

  %%号,两个%号,最长区配 。  通配符都是支持的。 毕竟都是在shell下,经由shell解释输出。



2.  上面的 # % 都是用来定义匹配字符的操作。  而下面是用来定义固定字符的操作。

${变量:数字}

$ echo $do

Hello World

$ echo ${do:3}

lo World

前面的3个字符删除输出, 专业点叫作 偏移 , 向右偏移3个字符。

$ echo ${do:3:2}

lo

$ echo ${do:3:5}

lo Wo

在上面偏移的基础上,再向后截取输出几位字符。 空格可是字符啊。



3.  这边是用来替换变量的字符的。    ${变量/匹配字符/替换字符}

$ echo ${do/l/L}
HeLlo World

把第一个匹配到的字符,也就是l , 替换成大写L .

这里是只替换了第一个匹配到的字符。如果把变量后面的/变成两个,就变成替换所有了。

$ echo ${do//l/L}
HeLLo WorLd

替换了所有的l , 这里也是可以用通配符的, 但是这里没有最长最短匹配之说,只有替换1个还是替换所有。     至于效果,亲们可以自己试试。



二、 变量的值,忘了学的是什么名了, 以后再改。

变量为空也是值。

1.  ${变量-值} ,里面的是减号。  那个值当然也可以用变量,不过要加上$,相当于变量引用。

-号的左边和右边完全是不同的两个部分。

$ echo $do
Hello World

$ echo ${do-kaka}

Hello World                            #在do有值的情况下,输出do的值。

$ unset do

$ echo ${do-kaka}                      #在没有do变量的情况下,也就是没有值。 输出kaka。

kaka

$ do=

$ echo ${do-kaka}                      #在do有值的情况下,输出do的值,do是空值。
                
                                       #所以输出空。

这个的别一种方式一般在判断默认值的时候用。如: do=${do:-kaka}   下面再说。

透露一点, 加上 : 将代表空不再判断为值, 上面最后一个例子将输出 kaka

2.  ${变量=值}   ,里面是等号。

$ echo $do
Hello World

$ echo ${do=kaka}                      #在do有值的情况下,输出do的值。

Hello World                            

$ unset do

$ echo ${do=kaka}                      #在没有do变量的情况下,没有值。输出kaka。

kaka                                   

$ echo $do

kaka                                    #并且把kaka给变量do。

比 - 加了一项,只要输出kaka,就会把kaka赋给do。

3.  ${变量+值}  , 里面是加号。

$ echo $do
Hello World

$ echo ${do+kaka}                        #do有值的情况下,输出kaka

kaka

$ unset do

$ echo ${do+kaka}                        #在没有do这个变量的情况下,没有值。那就没有吧。
                                         #

$ do=

$ echo ${do+kaka}                        #空值,输出kaka

kaka

看样子正好与 - 相反, 这个是变量有值则用后面的值,而 - 号是没值则用后面的值。

4. ${变量?值}

$ echo $do
Hello World

$ echo ${do?kaka}

Hello World

$ unset do

$ echo ${do?kaka}                        # 看到了没,在没有do这个变量的情况下,没有值。
                                         # 提示错误信息是 kaka
bash: do: kaka

$ do=

$ echo ${do?kaka}

除了没有值的情况下会报错,并且报错信息是kaka外,就没有别的了。



下面还是关于 - = + ? 的,不过变成了 :-  :=  :+  :?   。

不一样之处就是把空值给抹去了,从此以后空就真的空了, 空不再代表值而存在,

而是跟unset一样。



这里说明一下, 以shell来说。其实unset就是把变量的内存空间的地址给撤销了,

而变量空值,就是有变量的内存空间地址,不过内存空间里面没有数据。

而bash(shell的一种)的变量是随用随申请的,所以说不会发生没有变量的这一种情况。



1.  ${变量:-值} .

$ echo $do
Hello World

$ echo ${do:-kaka}

Hello World

$ unset do

$ echo ${do:-kaka}                         #没有do变量,同样的相当于没有值。 输出kaka

kaka

$ do=

$ echo ${do:-kaka}                          #空不再代表值, 在do没有值的情况下
                                            #输出kaka
kaka

怎么样,区别只有一点, 空不再代表值了。

2. ${变量:=值}  .

$ echo $do
Hello World
$ echo ${do:=kaka}
Hello World
$ echo $do
Hello World
$ unset do
$ echo ${do:=kaka}
kaka
$ echo $do
kaka
$ do=
$ echo ${do:=kaka}                         #空不再代表值,所以输出kaka
kaka
$ echo $do
kaka

还是那个意思,kaka输出,并且赋值给了do。    空不再代表值了。

3. ${变量:+值}

$ echo $do
Hello World

$ echo ${do:+kaka}                        #在do有值的情况下,输出kaka

kaka

$ unset do

$ echo ${do:+kaka}                        #在do不存在的时候,也就是没有值。 输出do的值,
                                          #而do的值当然是不存在的, 不过还是会输出空白行。
$ do=

$ echo ${do:+kaka}                        #do空着手来,手不再是值了。 kaka是不会理它的。 
                                          #同样的空白行。

+ 号是有值才会用后面的那个值的。 跟-号正好相反。

4. ${变量:?值}

$ echo $do
Hello World

$ echo ${do:?kaka}

Hello World

$ unset do

$ echo ${do:?kaka}                       #没有do变量,当然没有值,报kaka错误。

bash: do: kaka

$ do=

$ echo ${do:?kaka}                        #do为空,代表没有值。 报kaka错误。

bash: do: kaka

这个跟-号也差不多了, 只不过还里是输出的错误信息。

变量值总结:

${Var:-Value}         变量Var 为unset 或 null  则输出Value。                有值则输出变量Var的值。

${Var:=Value}        变量Var 为unset 或 null  则输出Value,并且赋值于变量Var。   同上。

${Var:+Value}        变量Var 为unset 或 null  则输出变量Var。             有值则输出Value.

${Var:?Value}        变量Var 为unset 或 null  则输出错误信息Value。  有值则输出变量Var的值。

${Var-Value}         变量Var 为 unset 则输出Value。                  有值或为空,则输出变量Var的值。

${Var=Value}        变量Var 为 unset 则输出Value,并且赋值于变量Var。        同上。

${Var+Value}        变量Var 为 unset 则输出变量Var。              有值或为空,则输出Value

${Var?Value}        变量Var 为 unset 则输出错误信息Value。    有值或为空, 则输出变量Var。



不求能够帮助大家多少,只求不要误导大家。   如有哪位朋友发现错误请帮忙指出。



本文出自 “大蕃茄” 博客,请务必保留此出处http://opens.blog.51cto.com/989185/1564058

时间: 2025-01-07 08:56:00

Linux 变量操作的相关文章

Linux 变量操作记录

变量操作总结: ${Var:-Value}        变量Var 为unset 或 null  则输出Value. 有值则输出变量Var的值. ${Var:=Value}        变量Var 为unset 或 null  则输出Value,并且赋值于变量Var. 同上. ${Var:+Value}        变量Var 为unset 或 null  则输出变量Var. 有值则输出Value. ${Var:?Value}        变量Var 为unset 或 null  则输出

linux——Shell 脚本基础篇(变量类型,变量操作,定义,运算与逻辑关系)

Shell 脚本基础 1.变量 什么是变量 #a=1 # echo $a 1 变量:可以变化的量 1.2变量名称注意事项 变量名不能以数字开头 不能与系统中已有的环境变量重名,尽量不要全部使用大写,尽量不要使用"_"下划线开头 最好做到见名知意 不能使用程序中的保留字,列如if,for等 1.3变量类型 字符型 数值型 整型浮点型 布尔型 条件是和否 #$echo $a 引用 abc 撤销 unset +(变量名)a 1.4变量操作 * 设置变量 * 引用变量 * 撤销变量 单引号和双

关于Linux文件操作1.1

本文章记录本人在学习Linux中遇到的一些比较好的题目,给大家分享一下. 先来实验题目: 编程实现一个程序,功能是每一秒钟向屏幕打印当前系统时间,和当前行号示例如下 该程序应该无限循环,直到强制中断该进程为止(比如按Ctrl-C中断程序).接着再启动程序,将系统时间追加到原文件之后,并且序号能够接续上次的序号: 好了看完题目后我们应该想的是,实现这么一个功能我们需要什么知识? 我们实现功能的逻辑是什么? 我们在写代码中有什么细节需要注意的(PS:使代码尽善尽美!) a):  先花五分钟想一下这个

你一定要知道的关于Linux文件目录操作的12个常用命令

写在前面: 1,<你一定要知道的关于Linux文件目录操作的12个常用命令>是楼主收集的关于Linux文件目录操作最常用的命令,包括文件或目录的新建.拷贝.移动.删除.查看等,是开发人员操作Linux系统的常用命令,所以你一定要知道. 2,<你一定要知道的关于Linux文件目录操作的12个常用命令>适合初学者,对于Linux大神的请绕过,不过欢迎一起讨论学习! 3,此次收集,多谢来自http://www.cnblogs.com/peida/archive/2012/10/23/27

Linux 变量的使用

目录 1. Shell 脚本规范 2. Shell 脚本执行 3. Shell 脚本变量 3.1 环境变量 3.1.1 自定义环境变量 3.1.2 显示与取消环境变量 3.1.3 环境变量初始化与对应文件的生效顺序 3.2 普通变量 3.2.1 定义本地变量 3.2.2 shell 调用变量 3.2.3 grep 调用变量 3.2.4 awk 调用变量 3.3 特殊变量 3.4 变量子串 4. Shell 运算符 x.-系统变量列表 1. Shell 脚本规范 一个规范的 Shell 脚本在第一

linux 变量

linux中变量分为四种 1.用户自定义变量 2.环境变量 3.位置参数变量 4.预定义变量 linux变量名不能数字开头,变量默认内新是字符串型,如果需要数值运算,则必须定义变量 为数值型 name=username 等号两边不能有空格,linux中空格表示分割, 表示命令和选项 name=“username” name="$(name)"12333 set命令,查看系统中所有的变量 unset  aa 删除刚才定义的变量 本地变量只在当前shell起作用 ,环境变量在所有子shel

linux文件操作

1.linux文件操作 cat test.txt | head -n 100 查看开始100行 cat finalout.txt | head -n 100 | cut -d , -f 2   安装,分割各行,取第2个位置的数据 cat test.txt |sed 's/""//g' 查看下效果 cat finalout.txt | head -n 10 | cut -d , -f 2 按,切割 cat part_name_tmp.txt | cut -d \" -f 2 &

linux下操作gpio寄存器的方法

一. 在驱动中: 1. 用的时候映射端口:ioremap; #define GPIO_OFT(x) ((x) - 0x56000000) #define GPFCON (*(volatile unsigned long *)(gpio_va + GPIO_OFT(0x56000050))) gpio_va = ioremap(0x56000000, 0x100000); // 物理地址0x56000000, 映射区分配的大小0x100000字节 这样映射过后,就可以直接操作寄存器了: 配置3引脚

linux内存操作--ioremap和mmap学习笔记

最近在做视频输出相关的东西,对于预留给framebuffer的内存使用不是很清楚,现在找到一些资料整理一下,以备使用. 对于一个系统来讲,会有很多的外设,那么这些外设的管理都是通过CPU完成.那么CPU在这个过程中是如何找到外设的呢? 尽管在一个系统中会有诸多的外设,在每个外设的接口电路中会有多个端口.但是如果系统能够每个端口都被赋予一个具体的地址值,那么在系统中就能轻易的找到任何一个外设.系统在管理的时候,不管是内存还是外设都需要分配一个内存地址.对于一个32bit的系统来讲,可寻址的范围为2