我正在处理主要是shell和Perl文件的管道,所有这些文件都将参数(路径)传递给下一个文件。我决定最好使用单个文件来存储所有路径,并为每个文件调用它。问题是我使用awk来抓取每个文件开头的文件,结果是很多重复。
我的问题是:我不知道是否有办法将键值对存储在一个文件中,以便shell可以原生地对键执行某些操作并返回值?它需要访问外部文件,因为管道使用许多脚本,特定文件中的映射会导致参数传递到任何地方。是否有一些我不知道的小怪癖在外部文件上执行地图功能?
答案 0 :(得分:3)
在bash中,有mapfile
,但是将文件的行读入数字索引的数组中。要将空格分隔的文件读入关联数组,我会
declare -A map
while read key value; do
map[$key]=$value
done < filename
然而,这听起来像XY problem。你能给我们一个关于你实际做了什么的例子(代码中)吗?当我看到grep | awk | sed的长条纹时,通常会有一种简化方法。例如,通过参数传递数据比通过stdout | stdin?
传递更好换句话说,我质疑你的陈述&#34;我觉得它会更好......&#34;
答案 1 :(得分:3)
您可以创建env var assignments文件并根据需要提供该文件,即。
$ cat myEnvFile
path1=/x/y/z
path2=/w/xy
path3=/r/s/t
otherOpt1="-x"
在您的脚本中,您可以使用. myEnvFile
或相同功能sourc myEnvFile
的更多版本(假设是bash shell)来源,即
$cat myScript
#!/bin/bash
. /path/to/myEnvFile
# main logic below
....
# references to defined var
if [[ -d $path2 ]] ; then
cd $path2
else
echo "no pa4h2=$path2 found, can't continue" 1>&1
exit 1
fi
根据您描述问题的方式,这应该很有效,并为您的所有变量设置提供一站式服务。
IHTH