shell变量的特殊用法

转载:http://blog.csdn.net/shmilyringpull/article/details/7631106

假设我们定义了一个变量为:
file=/dir1/dir2/dir3/my.file.txt

可以用${ }分别替换得到不同的值:
${file#*/}:删掉第一个 / 及其左边的字符串:dir1/dir2/dir3/my.file.txt
${file##*/}:删掉最后一个 /  及其左边的字符串:my.file.txt
${file#*.}:删掉第一个 .  及其左边的字符串:file.txt
${file##*.}:删掉最后一个 .  及其左边的字符串:txt
${file%/*}:删掉最后一个  /  及其右边的字符串:/dir1/dir2/dir3
${file%%/*}:删掉第一个 /  及其右边的字符串:(空值)
${file%.*}:删掉最后一个  .  及其右边的字符串:/dir1/dir2/dir3/my.file
${file%%.*}:删掉第一个  .   及其右边的字符串:/dir1/dir2/dir3/my

记忆的方法为:
# 是 去掉左边(键盘上#在 $ 的左边)
%是去掉右边(键盘上% 在$ 的右边)
单一符号是最小匹配;两个符号是最大匹配
${file:0:5}:提取最左边的 5 个字节:/dir1
${file:5:5}:提取第 5 个字节右边的连续5个字节:/dir2

也可以对变量值里的字符串作替换:
${file/dir/path}:将第一个dir 替换为path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:将全部dir 替换为 path:/path1/path2/path3/my.file.txt

利用 ${ } 还可针对不同的变数状态赋值(沒设定、空值、非空值):
${file-my.file.txt} :假如 $file 沒有设定,則使用 my.file.txt 作传回值。(空值及非空值時不作处理)
${file:-my.file.txt} :假如 $file 沒有設定或為空值,則使用 my.file.txt 作傳回值。 (非空值時不作处理)
${file+my.file.txt} :假如 $file 設為空值或非空值,均使用 my.file.txt 作傳回值。(沒設定時不作处理)
${file:+my.file.txt} :若 $file 為非空值,則使用 my.file.txt 作傳回值。 (沒設定及空值時不作处理)
${file=my.file.txt} :若 $file 沒設定,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (空值及非空值時不作处理)
${file:=my.file.txt} :若 $file 沒設定或為空值,則使用 my.file.txt 作傳回值,同時將 $file 賦值為my.file.txt 。 (非空值時不作处理)
${file?my.file.txt} :若 $file 沒設定,則將 my.file.txt 輸出至 STDERR。 (空值及非空值時不作处理)

${file:?my.file.txt} :若 $file 没设定或为空值,则将 my.file.txt 输出至 STDERR。 (非空值時不作处理)

${#var} 可计算出变量值的长度:

${#file} 可得到 27 ,因为/dir1/dir2/dir3/my.file.txt 是27个字节

shell变量的特殊用法

时间: 2024-10-23 23:33:51

shell变量的特殊用法的相关文章

shell 变量的高级用法

变量删除和替换 案例:从头开始匹配,将符合最短的数据删除 (#) variable_1="I love you, Do you love me" echo $variable_1 variable_2=${variable_1#*ov} echo $variable_2 案例:从头开始匹配,将复合最短的数据删除(##) varible_3=${variable_1##*ov} echo $varible_3 案例:替换字符串,只替换第一次匹配成功的(/) echo $PATH var6

变量定义及用法的特殊形式实战

例1:经过反引号的`date`命令测试 [[email protected] ~]# echo '`date`'     `date` #单引号时看到啥显示啥 [[email protected] ~]# echo "`date`"  Fri Jun 16 14:45:29 CST 2017 #双引号时如果里面是变量,会先把变量解析成具体内容在显示 [[email protected] ~]# echo `date`   Fri Jun 16 14:46:49 CST 2017 #对于

shell变量/环境变量和set/env/export用法_转

转自:shell环境变量以及set,env,export的区别 一.shell环境变量的分类以及set env export的区别: set:显示(设置)shell变量,包括的私有变量以及用户变量.不同类的shell有不同的私有变量 bash,ksh,csh每中shell私有变量都不一样. env:显示(设置)用户变量变量. export:显示(设置)当前导出成用户变量的shell变量. export 显示当前导出成用户变量的shell变量,并显示变量的属性(是否只读),按变量名称排序: dec

《跟老男孩学Linux运维之shell编程实战》-第二章 shell变量的核心基础

这篇文章主要讲解 shell变量的核心基础. 1.变量是什么? 变量是什么?可能有好多人不明白,简单地说,变量就是用一个固定的字符串(也可能是字符.数字等的组合)代替更多.更复杂的内容,该内容里可能还会包含变量.路径.字符串等其他的内容. 变量的赋值方式为:先写变量名称,紧接着是"="这个字符,最后是值,中间无任何空格(变量的内容一般要加双引号,以防止出错,特别是当值里的内容之间有空格时). 如何打印变量?通过echo命令加上$变量名 打印变量的值: 例如:定义变量和打印变量: [[e

《Linux shell变量总结回顾》RHEL6

由于上篇文章总结的不是很详细,有很多方面并未涉及到shell各个方面,所以发表此文章对shell做了更全面的总结: 文章版权:http://www.cnblogs.com/linux-super-meng/ 环境变量路径: [[email protected] ~]# set   //查看到的是局部变量和全局变量2种 [[email protected] ~]# env  //查看系统的全局环境变量 [[email protected] ~]# echo $PATH  //查看系统环境变量路径

《Linux shell变量总结回顾》RHEL6(转)

文章版权:http://www.cnblogs.com/linux-super-meng/ 环境变量路径: [[email protected] ~]# set   //查看到的是局部变量和全局变量2种 [[email protected] ~]# env  //查看系统的全局环境变量 [[email protected] ~]# echo $PATH  //查看系统环境变量路径 [[email protected] ~]# export $PATH  //也可以使用export查看环境变量路径

shell中括号的特殊用法

shell中括号的特殊用法 Shell中的括号有其特殊的用法, 现总结如下:1. 符号$后的括号${a} 变量a的值, 在不引起歧义的情况下可以省略大括号.$(cmd) 命令替换, 结果为shell命令cmd的输出, 和`cmd`效果相同, 不过某些Shell版本不支持$()形式的命令替换, 如tcsh.$((exp)) 和`expr exp`效果相同, 计算数学表达式exp的数值, 其中exp只要符合C语言的运算规则即可, 甚至三目运算符和逻辑表达式都可以计算. a=1;b=2echo $[

第九章 变量的高级用法

内部变量 1.BASH 记录了bash Shell的路径(通常为/bin/bash) [[email protected] tmp]# echo "$BASH" /bin/bash 2.BASH_VERSINFO 为一个数组,分别存储bash shell的主版本号,此版本号,补丁级别,编译版本,发行状态,硬件架构 [[email protected] tmp]# cat c.sh #! /bin/bash for n in 0 1 2 3 4 5 do echo "BASH_

  shell中的select用法

select也是循环的一种,它比较适合用在用户选择的情况下.比如,我们有一个这样的需求,运行脚本后,让用户去选择数字,选择1,会运行w命令,选择2运行top命令,选择3运行free命令,选择4退出.脚本这样实现: #!/bin/bash echo "Please chose a number, 1: run w, 2: run top, 3: run free, 4: quit" echo select command in w top free quit do case $comma