| 
                         在这里, 
    ${...} 告诉 shell 展开花括号里的内容 
    a 就是需要操作的变量 
    % 告诉 shell 需要在展开字符串之后从字符串的末尾去掉某些内容 
    gg 是被去掉的内容 
 
这个特性在转换文件格式的时候会比较有用,我来举个例子: 
ImageMagick 是一套可以用于操作图像文件的命令行工具,它有一个 convert 命令。这个 convert 命令的作用是可以为某个格式的图像文件制作一个另一格式的副本。 
下面这个命令就是使用 convert 为 JPEG 格式图像 image.jpg 制作一个 PNG 格式的图像副本 image.png: 
convert image.jpg image.png
  
在很多 Linux 发行版中都预装了 ImageMagick,如果没有预装,一般可以在发行版对应的软件管理器中找到。 
继续来看,在对变量进行展开之后,就可以批量执行相类似的操作了: 
i=image.jpgconvert $i ${i%jpg}png
  
这实际上是将变量 i 末尾的 "jpg" 去掉,然后加上 "png",最终将整个命令拼接成 convert image.jpg image.png。 
如果你觉得并不怎么样,可以想象一下有成百上千个图像文件需要进行这个操作,而仅仅运行: 
for i in *.jpg; do convert $i ${i%jpg}png; done
  
就瞬间完成任务了。 
如果需要去掉字符串开头的部分,就要将上面的 % 改成 # 了: 
$ a="Hello World!"$ echo Goodbye${a#Hello}Goodbye World!
  
参数展开还有很多用法,但一般在写脚本的时候才会需要用到。在这个系列以后的文章中就继续提到。 
合并输出
最后介绍一个花括号的用法,这个用法很简单,就是可以将多个命令的输出合并在一起。首先看下面这个命令: 
echo "I found all these PNGs:"; find . -iname "*.png"; echo "Within this bunch of files:"; ls > PNGs.txt
  
以分号分隔开的几条命令都会执行,但只有最后的 ls 命令的结果输出会被重定向到 PNGs.txt 文件中。如果将这几条命令用花括号包裹起来,就像这样: 
{ echo "I found all these PNGs:"; find . -iname "*.png"; echo "Within this bunch of files:"; ls; } > PNGs.txt
  
执行完毕后,可以看到 PNGs.txt 文件中会包含两次 echo 的内容、find 命令查找到的 PNG 文件以及最后的 ls 命令结果。 
需要注意的是,花括号与命令之间需要有空格隔开。因为这里的花括号 { 和 } 是作为 shell 中的保留字,shell 会将这两个符号之间的输出内容组合到一起。 
另外,各个命令之间要用分号 ; 分隔,否则命令无法正常运行。 
【编辑推荐】 
    - 为什么Linux系统管理员需要编程技能
 
    - 如何在Linux中检查密码的复杂性/强度和评分?
 
    - 在Linux中如何删除文件中的空行
 
    - 一文掌握 Linux 性能分析之网络篇
 
    - 如何在Linux中安装、配置和使用Fish Shell?
 
 
【责任编辑:庞桂玉 TEL:(010)68476606】 
            点赞 0                        (编辑:泰州站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |