如何用在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中执行命令,或者在脚本中增加新的参数。

不足还有待观察。

posted @ 2024-06-07 15:49  Laziko  阅读(3)  评论(0编辑  收藏  举报