1

我想将每个输出文件路径保存到一个变量中,然后通过它们查找时间戳。我想通过从我正在循环的节点列表中添加 nodeId 来标记每个变量。当我使用以下代码尝试此操作时,出现错误

output1_1:找不到命令

nodeList=('1_1' '1_6' '2_1' '2_6')
for i in "${nodeList[@]}"
do
   output${i}=$CWD/output/abc${i}.txt
   times${i}=$(grep  -m 1 '\"path\":' $output${i}| sed 's/.*timestampUtc\"://g' | sed 's/,.*//g')
done
4

2 回答 2

0

正如@muru建议的那样,试试

declare -A output times
nodeList=('1_1' '1_6' '2_1' '2_6')
for i in "${nodeList[@]}"; do
   output[${i}]=${PWD}/output/abc${i}.txt
   times[${i}]=$(grep  -m 1 '\"path\":' ${output[${i}]} | sed 's/.*timestampUtc\"://g' | sed 's/,.*//g')
done
于 2018-09-12T13:23:46.437 回答
0

设置名称派生自另一个变量的变量的一种方法是使用-v“printf”选项。要获取名称在另一个变量(例如varname)中的变量的值,请使用${!varname}.

请参阅从另一个字符串的值创建字符串变量名如何在 shell 脚本中动态生成新的变量名?.

使用这些可能的循环体是:

output_var=output${i}
times_var=times${i}

printf -v "$output_var" '%s' "$CWD/output/abc${i}.txt"
printf -v "$times_var" '%s' "$(grep  -m 1 '\"path\":' "${!output_var}" | sed 's/.*timestampUtc\"://g' | sed 's/,.*//g')"

请注意(除非CWD在您的程序中的其他地方设置)您可能想要$PWD而不是$CWD.

于 2018-09-12T18:21:45.260 回答