Shell脚本:语法错误:重定向意外:Shell中“ <<<”的替代是什么?

时间:2019-02-16 08:47:56

标签: string bash shell

这是我的代码:

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脚本中的“ <<<”还是我必须选择其他方式?我不太了解所有语法,因此无法替换。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

<<< "STRING"的替代方法是echo "STRING",但如果您使用管道 echo作为readecho "$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"

希望这会有所帮助。