我刚刚在这里注册。
我正在编写一个脚本,它将数组中的数据放入单独的变量中。
例子:
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
之前设置为数组,则可能也有其他索引的值,但您没有使用read
except 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}"