美文网首页
Linux—shell中$(( ))、$( )、``与${ }的

Linux—shell中$(( ))、$( )、``与${ }的

作者: 白纸糊 | 来源:发表于2019-02-26 14:36 被阅读0次

命令替换

`$( )`与`` ``(反引号)都是用来作命令替换的。

命令替换**与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。

exp 1

`1.  $ echo today is $(date "+%Y-%m-%d")

2.  today is 2014-07-01` </pre>

$( )与``

在操作上,这两者都是达到相应的效果,但是建议使用$( ),理由如下:

  • ``很容易与''搞混乱,尤其对初学者来说。
  • 在多层次的复合替换中,``必须要额外的跳脱处理(反斜线),而$( )比较直观。
  • 最后,$( )的弊端是,并不是所有的类unix系统都支持这种方式,但反引号是肯定支持的。

exp 2

`1. # 将cmd1执行结果作为cmd2参数,再将cmd2结果作为cmd3的参数

2.  cmd3 $(cmd2 $(cmd1))

4.  # 如果是用反引号,直接引用是不行的,还需要作跳脱处理

5.  cmd3 `cmd2 \`cmd1\``` </pre>

${ }变量替换

一般情况下,$var${var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围

1.  $ A=B

2.  $ echo ${A}B

3.  BB` </pre>

取路径、文件名、后缀
先赋值一个变量为一个路径,如下:

`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

记忆方法如下:

是去掉左边(在键盘上 # 在 $ 之左边)

  • % 是去掉右边(在键盘上 % 在 $ 之右边)
  • 单一符号是最小匹配;两个符号是最大匹配
  • *是用来匹配不要的字符,也就是想要去掉的那部分
  • 还有指定字符分隔号,与*配合,决定取哪部分

相关文章

网友评论

      本文标题:Linux—shell中$(( ))、$( )、``与${ }的

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