Bash sed没有解析变量
我被这里的bash脚本卡住了 我有一些变量:Bash sed没有解析变量,bash,sed,Bash,Sed,我被这里的bash脚本卡住了 我有一些变量: hostname1="sxxx" hostname2="vbbbb" hostname3="sggg" hostname4="aaa" ... 我试图用主机名变量更改文件夹中每个文件的第12行 for i in {1..20}; do eval h='$'hostname$i sed -i '12c'$h'' server$i.txt done 这些文件是server1.txt server2.txt server3.txt serv
hostname1="sxxx" hostname2="vbbbb" hostname3="sggg" hostname4="aaa" ...
我试图用主机名变量更改文件夹中每个文件的第12行
for i in {1..20}; do
eval h='$'hostname$i
sed -i '12c'$h'' server$i.txt
done
这些文件是server1.txt server2.txt server3.txt server4.txt…
我正试图通过一个while循环来实现这一点:
i=1
imax=1
while [[ $i -le 20 ]]
do
sed -i "12s/.*/$hostname$imax/" server$((imax)).txt
(( i++ ))
(( imax++ ))
if [[ imax -eq 21 ]]
then
imax=1
fi
done
我想使用sed
将单词host name与imax连接起来,然后将其用作变量。
也许有了这个,我已经足够清楚了:
$hostname=hostname$imax; //for exammple
sed -i "12s/.*/$hostname/" server$((imax)).txt // i need here the variable $hostname to have the content "sxxx"
您可以通过使用
间接参数展开
来实现这一点
${!var}
这里,var
-是一个动态生成的变量名
试试这个:
sed -i "12s/.*/${!hostname}/" server$((imax)).txt
示例:
$ hostname1="sat"
$ i=1
$ hostval="hostname$i"
$ echo ${!hostval}
sat
我会用下面的方法。使用change,而不是sed中的switch。然后强引用我的sed,并取消引用我的变量
for i in {1..20}; do
eval h='$'hostname$i
sed -i '12c'$h'' server$i.txt
done
Bash3和更高版本支持ForLooop中的数字范围,比while循环更简单。我也不知道你在用imax做什么,而不仅仅是我,b/c你在20时退出,但是把imax值改为1。。。它永远不会使用它
编辑:b/c我误读了基本上,你的问题来自于一个变量的解释
尝试使用sed>=4.2.2,应该可以与您的代码一起使用。有没有任何特殊原因,您有一堆单独的
hostnameN
变量,而不是数组hostname[N]
?阵列会更容易使用。这是因为它们是用于游戏服务器的,在我的情况下,每个服务器都应该有单独的配置文件。我认为您不理解我的问题。我无法想象为什么游戏服务器会关心您创建配置文件的shell脚本是否使用包含12个元素和12个独立变量的数组。