首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何进行内联替换/扩展?

如何进行内联替换/扩展?
EN

Stack Overflow用户
提问于 2016-11-25 17:17:45
回答 1查看 979关注 0票数 0

我运行一个脚本。/script.sh。

代码语言:javascript
复制
./script config.txt 480

哪一张发票

代码语言:javascript
复制
command --crf "${crf##*=}"

它从配置文件中读取。配置文件包含几个参数,以模式命名:<parameter1><number>=<value>,例如。

代码语言:javascript
复制
crf480=18.2
crf720=18.5
(…)

现在,我在脚本的开头包括一些行:

代码语言:javascript
复制
<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的值)。

我想在开始时避免使用这个长长的列表,并在内联中进行替换/扩展,这样就可以根据$2将"$crf“扩展到"$crf480”。我在https://mywiki.wooledge.org/BashFAQ上花了一段时间在这里搜索这个站点,但由于我不是以英语为母语的人,而且对bash的了解也很有限,所以我没能找到解决方案。

在bash中可以进行这样的内联替换吗?如果可以,如何进行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-25 17:42:33

只需读取配置的每一行并设置变量,如果后缀是您要查找的内容:

代码语言:javascript
复制
$ 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包含以下内容:

代码语言:javascript
复制
$ cat config
var480=four eighty
var720=seven twenty

您可以这样运行脚本:

代码语言:javascript
复制
$ ./script 480
$var contains four eighty

$ ./script 720
$var contains seven twenty
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40809875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档