shell中${ } 的一些特异功能

假设我们定义了一个变量为: 
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 定义为非空值。 (保留空值及非空值) 
${file:=my.file.txt} :若 $file 没设定或为空值,则使用my.file.txt 作默认值,同时将 $file 定义为非空值。 (保留非空值) 
${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 个字节

时间: 2024-10-20 20:53:04

shell中${ } 的一些特异功能的相关文章

Python3 Tkinter基础 Frame bind 绑定敲击键盘事件 将按键打印到Shell中

镇场诗: 清心感悟智慧语,不着世间名与利.学水处下纳百川,舍尽贡高我慢意. 学有小成返哺根,愿铸一良心博客.诚心于此写经验,愿见文者得启发.------------------------------------------ code: from tkinter import * root=Tk() #创建一个框架,在这个框架中响应事件 frame=Frame(root, width=200,height=200, background='green') def callBack(event):

shell 中 关于 $

$[] 将数值赋予给变量:var=$[1+5],   var=$[$a + $b] $() $1 $0 获取参数 $#获取参数个数 echo the last parameter is ${$#}  错误,大括号里面不能使用美元符号 可以用${!#} $* 将命令行参数作为一个单词处理 [email protected] 将命令行参数作为多个单词处理 shell 中 关于 $,布布扣,bubuko.com

bash shell 中的比较

1.算术比较 运算符 描述 -eq 等于 -ne 不等于 -gt 大于 -lt 小于 -ge 大于等于 -le 小于等于 举例: [ $var -eq 1 ] #变量等于1 返回真 [ $var -ne 1 ] #变量不等于1 返回真 [ $var -gt 1 ] #变量大于1 返回真 [ $var -lt 1 ] #变量小于1 返回真 [ $var -ge 1 ] #变量大于等于1 返回真 [ $var -le 1 ] #变量小于等于1 返回真 2.字符串比较 字符串比较时候使用[[ ]] 双

shell中read的使用

read [参数][变量名] read -p "please input a number:"var read -t 10 -p "please input a number:"var #!/bin/sh while true do read -t 10 -p "please input two number:" a b expr $a + 0 >/dev/null 2>&1 [ $? -ne 0 ] && c

shell 中的<,<<,>,>>

相信熟悉linux的童鞋不会对这四个符合陌生,shell脚本的文件流有时候真的挺容易搞晕人的,下面我们一起了解一下吧 参考链接:http://www.cnblogs.com/chengmo/archive/2010/10/20/1855805.html 文件描述符 linux启动后,会默认打开3个文件描述符,分别是:标准输入standard input 0,正确输出standard output 1,错误输出:error output 2 以后打开文件后.新增文件绑定描述符 可以依次增加. 一条

shell 中if的使用

shell中if做比较 shell判断数组中是否包含某个元素: ary=(1 2 3) a=2 if [[ "${ary[@]}" =~ "$a" ]] ; then echo "a in ary" else echo "a not in ary" fi 比较两个字符串是否相等的办法是: if [ "$test"x = "test"x ]; then 这里的关键有几点: 1 使用单个等号

linux shell中的&& || 和()

1. linux命令返回值介绍 shell 在执行某个命令时,会有一个返回值,该值保存在shell变量$?中.当$?为0时,表示命令执行成功:当$?为1时,表示命令执行失败. 2. && 语法格式如下: command1 && command2 &&... command之间用&&连接,实现逻辑与功能 当&&左边的命令执行成功(command的返回值$?=0)时,&&右边的command才会被执行. 只要有一个

shell 中 2>&1 的使用

一 相关知识 1)默认地,标准的输入为键盘,但是也可以来自文件或管道(pipe |). 2)默认地,标准的输出为终端(terminal),但是也可以重定向到文件,管道或后引号(backquotes `). 3) 默认地,标准的错误输出到终端,但是也可以重定向到文件. 4)标准的输入,输出和错误输出分别表示为STDIN,STDOUT,STDERR,也可以用0,1,2来表示. 5)其实除了以上常用的3中文件描述符,还有3~9也可以作为文件描述符.3~9你可以认为是执行某个地方的文件描述符,常被用来作

shell中的read

使用read读入变量赋值 参数 -p    设置提示信息 -t    设置超时时间 使用方法:     [[email protected] script]# read -p "pls input :" n     pls input :12     [[email protected] script]# echo $n     12 特殊用法 [[email protected] script]# cat jisuan.sh  #!/bin/bash read -t 10 -p &q