我的问题如下:
例如,说我有四类动物:猫,狗,马和老鼠。如果要打印的项目对应于cat变量(在print语句中使用),那么我希望为这些项目分配cat1,cat2等的变量名称。这是为了区分不同的变量类型并有效地使用它们后来。
注意:我打算一次只用这4个类别之一填充配置,然后每次运行print语句时,我都会覆盖配置文件的内容。
所以我的配置文件在分配之前(执行print语句之后)将如下所示。
whitecat
blackcat
#or like this
brownhorse
greyhorse
我希望分配后看起来像这样。
cat1="whitecat"
cat2="blackcat"
#or like this
horse1="brownhorse"
horse2="greyhorse"
打印语句使用路径${MAINPATH}/${SUBPATH}
访问目录,其中MAINPATH
被定义为/home/jt8146
,而SUBPATH
被定义为cat,dog,horse或mouse。它基于SUBPATH
提取与该动物有关的信息。也就是说,如果SUBPATH
被定义为cat,则它将输入配置文件信息,例如whitecat
和blackcat
因此完整路径看起来像/home/jt8146/cat
一旦此信息已输出到配置文件,我希望将信息whitecat
和blackcat
分配给一个变量。但是,我不必进入配置文件并键入任务,而是希望信息一旦执行便自动执行。获取输出到配置文件。
所以我当时想我要创建一个包含if
,elif
语句(即if SUBPATH = cat then do assignment cat1, cat2 to each element in the config file
在执行if语句之前,如果配置文件如下所示
whitecat
blackcat
yellowcat
greencat
然后将whitecat
分配给变量cat1
,将blackcat
分配给变量cat2
,依此类推。
print
语句是我正在使用的另一个应用程序的内置命令,它从指定的路径检索信息。 print
语句正在运行,并且该信息在配置文件中但未分配,这是我需要帮助的地方。
我的问题是:
1)一旦配置已被填充,如何为配置的内容分配变量?
2)堆栈溢出是否存在类似的问题,有人可以指出我的答案吗?
答案 0 :(得分:0)
IIUC,您有一个名为config
的文件,如下所示:
cat1="whitecat"
cat2="blackcat"
现在,您要具有cat1
的变量cat2
和whitecat
和blackcat
值。您可以通过获取配置来做到这一点
文件:
$ . config
$ echo $cat1
whitecat
$ echo $cat2
blackcat
(请注意,$
是command line
prompt
用来表示新行的开始,而不是命令的一部分。
.
是Bash和执行 sourcing 的其他Shell中的命令,
表示读取作为参数给出的文件,并作为shell命令执行其中的每一行。
答案 1 :(得分:0)
我想您提供的第一个文件称为config
,类别(cat
,horse
等)包含在变量$category
中。在我们的示例中,$category
的值为cat
。
首先,您必须生成一个文件,假设"$category.config"
包含v.gr。
cat1="whitecat"
cat2="blackcat"
通过以下方式进行操作:
awk -v category="$category" '{print category""NR"=\""$0"\""}' config > "$category.config"
现在,您想使"$category.config"
中定义的变量可被当前脚本访问,则必须 source 。使用. "$category.config"
语句可以做到这一点,这意味着$category.config
的内容必须在当前点源于当前脚本。
演示:
echo before sourcing: cat1 = $cat1
. cat.config
echo after sourcing: cat1 = $cat1
将产生下一个输出:
before sourcing: cat1 =
after sourcing: cat1 = whitecat
我可以发布. cat.config
而不是. "$category.config"
。