美文网首页
shell中${}的使用

shell中${}的使用

作者: 渐悟懂劲 | 来源:发表于2019-04-05 14:38 被阅读0次

在shell中经常要对变量进行字符串的截取操作,虽然截取字符串的方法很多,在这里用${}的方法操作变量应该是最简洁的方式。

1. 最小匹配和最大匹配

shell脚本中经常要对输入的参数截取其路径或文件名,例如变量file中保存着输入参数:

file=/home/user/file1.txt
表达式 作用 结果
${file#*/} 删掉第一个 “/” 及其左边的字符串 home/user/file1.txt
${file##*/} 删掉最后一个 “/” 及其左边的字符串 file1.txt
${file%/*} 删掉最后一个 “/” 及其右边的字符串 /home/user
${file%%/*} 删掉第一个 “/” 及其右边的字符串 (空值)
${file#*.} 删掉第一个 “.” 及其左边的字符串 txt
${file##*.} 删掉最后一个 “.” 及其左边的字符串 txt
${file%.*} 删掉最后一个 “.” 及其右边的字符串 /home/user/file1
${file%%.*} 删掉第一个 “.” 及其右边的字符串 /home/user/file1

这里的最大匹配和最小匹配与正则表达式是不是很像,但是用起来简单方便。

如果觉得不方便记忆,可以这样来看:

键盘上#、 $、%分别对应着3、4、5

  • # 是 去掉左边(键盘上#在 $ 的左边)
  • %是去掉右边(键盘上% 在$ 的右边)
  • 一个符号是最小匹配;两个符号是最大匹配

因此,#/就是以"/"为末尾字符的最小匹配(从左到右),%/就是以"/"为开头字符的最小匹配(从右到左)。

2. 按长度截取字符串

仍然对上面的file变量进行操作,注意字符的位置从0开始

表达式 作用 结果
${file:0:5} 截取最左边的 5 个字符 /home
${file:1:5} 截取从第2个字符开始的5个字符 home/
${file:5:5} 截取从第6个字符开始的5个字符 /user

3. 字符串替换

表达式 作用 结果
${file/e/o} 把变量中第一个字符"e"替换为字符"o" /homo/user/file1.txt
${file//e/o} 把变量中全部字符"e"替换为字符"o" /homo/usor/filo1.txt

4.根据变量的赋值状态重新赋值

利用 ${ } 还可针对不同的变量赋值状态(未赋值、空值、非空值)返回不同的结果:

表达式 作用
${file-/home} 假如 $file 沒有赋值,則使用 /home 作传回值。($file为空值及非空值时返回变量本身)
${file:-/home} 假如 $file 沒有赋值或为空值,則使用 /home 作传回值。 ($file非空值时返回变量本身)
${file+/home} 假如 $file 有赋值(空值或非空值),则都使用 /home 作传回值。($file沒有赋值则不作处理)
${file:+/home} 假如 $file 为非空值,則使用 /home 作传回值。 ($file沒有赋值或为空值均不作处理)
${file=/home} 假如 $file 沒有赋值,則使用 /home 作传回值,同时将$file赋值为/home。(空值及非空值时不作处理)
${file:=/home} 假如 $file 沒有赋值或为空值,則使用 /home 作传回值,同时将$file赋值为/home。(非空值时不作处理)
${file?/home} 假如 $file 沒有赋值,則將 /home 输出至 STDERR,也就是一条包含/home内容的错误信息。(空值及非空值时不作处理)
${file:?/home} 假如 $file 沒有赋值或为空值,則將 /home 输出至 STDERR,(非空值时不作处理)
${#file} 返回 $file 变量字符串的长度

相关文章

  • shell中${}的使用

    在shell中经常要对变量进行字符串的截取操作,虽然截取字符串的方法很多,在这里用${}的方法操作变量应该是最简洁...

  • Adb使用笔记

    Adb使用过程中涉及到 Adb shell 进入shell模式,使用adb shell top 会实时刷新进程信息...

  • Git

    Shell和vi shell 在计算机科学中,Shell俗称壳,用来区别于Kernel(核),是指“提供使用者使用...

  • 查看当前shell

    查看当前可使用的shell 最常用的查看shell的命令,但不能实时反映当前shell 环境变量中shell的匹配...

  • Shell(二):变量、数据重定向和管道

    在上一篇博客Shell(一):功能、配置和插件中,介绍了为什么要使用shell,shell有哪些功能,如何使用oh...

  • Shell环境变量

    bash shell中使用环境变量在内存中存储有关shell会话和工作环境的数据。以便程序或shell中运行的脚本...

  • Spring Shell和使用Attach API

    Spring Shell简单使用 spring-shell中已经包含了spring-boot-starter,直接...

  • day28-2019年4月9日

    shell编程基础 1、为什么要学shell编程? linux系统中会大量得使用shell,工作中也需要...

  • shell脚本

    SHELL 1.1、为什么要学习shell编程? Linux中会大量的使用shell,工作中我们也需要自动化实...

  • 建立一个脚本

    Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行sh...

网友评论

      本文标题:shell中${}的使用

      本文链接:https://www.haomeiwen.com/subject/uwbhiqtx.html