我运行一个脚本 ./script.sh,例如
./script config.txt 480
开具类似
的发票command --crf "${crf##*=}"
它从配置文件中读取。配置文件包含几个参数,以模式命名:<parameter1><number>=<value>
,
e.g。
crf480=18.2
crf720=18.5
(…)
现在,我在剧本的开头加入了一些代码:
<An IFS that reads the config>
crf=$(cat "$config"|grep crf|grep $2)
qcomp=$(cat "$config"|grep qcomp|grep $2)
aqmode=$(cat "$config"|grep aqmode|grep $2)
…
所以使用./script config.txt 480 $ crf具有所需的值(crf480的值)。
我想在开始时避免使用那个长列表并进行内联替换/扩展,以便&#34; $ crf&#34;被扩展为&#34; $ crf480&#34;,取决于$ 2。 我花了一些时间在https://mywiki.wooledge.org/BashFAQ并在这里搜索了这个网站,但由于我不是母语,对bash知之甚少,所以我没有设法找到解决方案。
是否可以在bash中进行此类内联替换,如果可以,该怎么做?
答案 0 :(得分:1)
只需阅读配置的每一行,并设置变量,如果后缀是您正在寻找的内容:
$ cat script
#!/bin/bash
suffix="$1"
# Read each name/value pair
while IFS="=" read -r name value
do
# Check if the name ends with our chosen suffix
if [[ $name == *"$suffix" ]]
then
# Set the variable name without the suffix
declare "${name%"$suffix"}=$value"
fi
done < config
echo "\$var contains $var"
如果config
包含以下内容:
$ cat config
var480=four eighty
var720=seven twenty
您可以像这样运行脚本:
$ ./script 480
$var contains four eighty
$ ./script 720
$var contains seven twenty