如何用在bash中截取部分系统参数?
📜背景
在编程过程中遇到一个问题。在一个bash
脚本中,我需要用lame
重新生成音频文件的压缩版本。原有的参数为三个:种子值
、源txt文件
和目标wav文件
。我希望的是能够顺便自动生成压缩的mp3版本以及添加了背景音乐的版本,但是我又不希望添加新的输入参数。这样,对于原本的系统参数进行切割和连接就成为必要的操作。
❓问题
如何切割bash从系统中获得的参数,并把参数和新的文件后缀连接在一起?
💡方案
第一,一般来说,bash脚本中,$0
表示脚本自身的名称,$1
表示第一个参数,$2
表示第二个参数,$3
之后的以此类推。
第二,bash脚本用$
符号获取变量的值。换言之,不管是系统变量,还是脚本自身通过=
所命名的变量,都可以通过$
进行获取。
第三,bash脚本对变量获取提供了索引的语法格式:${var:start:end}
。其中var
是你的变量名。start
是起始位置,值应为正值,表示从左到右,从0开始计。
end
是结束位置,可正可负。为负值,值的大小相当于从变量尾部删除的字符数目。
如果为起始位置/结束位置空,表示到首/尾处,不进行截取。
第四,bash脚本对于变量的连接,只需要在字符串内把变量和字符串内容连接在一起即可(如果会出现变量和字母连接的情形,用${var}
的语法格式声明变量名的边界即可)。
所以对于某个变量i,要其最后三个字符为指定值,一个通用的范式为:
"${i::-3}<new-value>"
而更加一般的截取方式是:
"<string>${<variable>:<start-position>:<end-position>}<string>"
🎓评价
好处是可以不用在多在bash中执行命令,或者在脚本中增加新的参数。
不足还有待观察。