为什么此编码会因并行读取两个变量而出现“模糊重定向”错误?我必须使用while或for循环,不能使用“paste”
#!/bin/bash
export fname="Adam Baden Caydin"
export lname="Sam Tam Uam"
while read first_name <$fname && read last_name <$lname
do
echo $first_name " : " $last_name
echo "doing some processing here..... "
done
错误: 。 /f1.sh:line 4:$ fname:ambiguous redirect
替换最后一行“完成”并给出相同的结果
done <<< "$fname $lname"
错误: ./f1.sh:4行:$ fname:模糊重定向
预期输出
Adman Sam
Baden Tam
Caydin Uam
答案 0 :(得分:3)
read
期望每个输入都在一个单独的行上,因此您必须用换行符替换空格。要并行读取名称,您需要将相应的项目组合到同一行输入中。您可以使用paste
命令执行此操作。
paste <(tr ' ' '\n' <<<"$fname") <(tr ' ' '\n' <<<"$lname") | while read first_name last_name
do
echo $first_name : $last_name
done
糟糕,没有注意到使用paste
的约束。另一种解决方案是使用数组而不是字符串:
fname=(Adam Baden Caydin)
lname=(Sam Tam Uam)
i=0
for first_name in "${fname[@]}"
do
last_name=${lname[$i]}
echo $first_name : $last_name
((i++))
done