这是我的代码:
with
我知道错误是什么...
由于我是Shell脚本的新手。
我在stackoverflow中找到了将字符串拆分并放入数组的代码-但是f="\bkg\inp.txt"
while IFS='' read -r line || [[ -n "$line" ]]; do
IFS='|' read -r -a array <<< "$line"
#echo "${array[0]}"
if [ "${array[2]}" == "Sangamithra" ]; then
printf "%s" "${array[2]}|" "${array[1]}|"${array[0]}"
fi
done < "$f"
部分导致显示<<<
的问题。
现在应该替换shell脚本中的“ <<<”还是我必须选择其他方式?我不太了解所有语法,因此无法替换。
非常感谢任何帮助!
答案 0 :(得分:1)
<<< "STRING"
的替代方法是echo "STRING"
,但如果您使用管道
echo
作为read
到echo "$line" | read ..
命令的输出,
read
将在子Shell中被调用,
其中创建的变量无法从子Shell外部访问。
然后请尝试:
f="\bkg\inp.txt"
while IFS='' read -r line || [[ -n "$line" ]]; do
IFS='|' read -r -a array < <(echo "$line")
if [ "${array[2]}" == "Sangamithra" ]; then
printf "%s" "${array[2]}|${array[1]}|${array[0]}"
fi
done < "$f"
如果您执行的是sh
,而不是bash
,则脚本
以上将也抱怨有关重定向。
然后,请考虑切换到bash
,或尝试以下符合sh
版本:
#!/bin/sh
f="\bkg\inp.txt"
while IFS='' read -r line || [ -n "$line" ]; do
IFS="|" set -- $line
if [ "$3" = "Sangamithra" ]; then
printf "%s" "$3|$2|$1"
fi
done < "$f"
希望这会有所帮助。