增加变量名的最后部分

增加变量名的最后部分

我刚刚在这里注册。

我正在编写一个脚本,它将数组中的数据放入单独的变量中。

例子:

for((i=0; i < Counter; i++)); do
    while read -r Parmfilesjobid; do
        IFS=$'\n' read -d '' -r -a  "job$i" < ${Parmfilesjobid[$i]}
    done <<< "${Parmfilesjobid}" 
done

计数器是一个单独的变量,因为 for 循环必须运行的次数可能不同。

由于 $I 每次都会递增,我试图找出如何将 job$i 变成 job0、job1、job2。

这是因为每个 job$i 都包含单独的值。

当我使用时:

echo ${job1[@]}
echo ${job2[@]}
echo ${job3[@]}

我可以获得每个 job$i (job0, job1, job2) 的正确输出

但我希望 bash 将 job$i 转换为 job0,job1,job2 这样我就可以在另一个循环中将它们用作单独的变量。


感谢你及时的答复!

我将尝试解释输入是什么:

我有一些包含一些参数的文件。每个文件的这些参数都不同,但它们始终包含相同类型的数据。它包含客户 ID、订单 ID 和组 ID,它们组合起来形成 UNC 路径。

到目前为止,脚本找到了这些文件并将它们放入一个数组中,然后在我第一篇文章的 for 循环中使用该数组来提取每个单独文件中的数据并将其放入不同的数组(job$i)中。之后我就被困住了。

我可以单独回显每个作业并获取其中包含的数据:echo $job0 echo job1 echo job2

我需要找到一种方法来让另一个 for 循环与 job$i 一起工作,因为我需要每个 job$i 都运行 for 循环,以便提取数据并将其放入路径中。

答案1

read -r "job$i" < ...

这应该有效,如果i=3,则read应该设置job3

然而,你的循环看起来有点不对劲:

for((i=0; i < Counter; i++)); do
    while read -r Parmfilesjobid; do
        IFS=$'\n' read -d '' -r -a  "job$i" < ${Parmfilesjobid[$i]}

只会while read在 中放入一个值Parmfilesjobid,因此eg${Parmfilesjobid[1]}将被取消设置。 (当然,标量访问 like$var与 相同${var[0]},因此如果您Parmfilesjobid之前设置为数组,则可能也有其他索引的值,但您没有使用readexcept when中的值i=0

您还使用Parmfilesjobid作为循环的输入while read...和 所使用的变量read,这有点令人困惑,并且意味着 的后面迭代for会将上一次迭代中的while最后一次读取作为输入。Parmfilesjobid这似乎有些奇怪。

由于我没有看到您的输入,因此我不太确定您想在这里做什么。但我怀疑这样的事情可能更接近:

i=0
while read -r filename ; do
    IFS=$'\n' read -d '' -r -a  "job$i" < "$filename"
    let i++
done <<< "${var_with_filenames}"

相关内容