Bash 意外的文件结尾(脚本不工作)

Bash 意外的文件结尾(脚本不工作),bash,Bash,当我编写脚本并运行它时,它会说: 关于[[line==temp]]的文件意外结束。 我试图从文件中读取行并删除文件中的所有重复。 cleanFiles删除所有空行 while read line; do while read temp; do if[[ line == temp ]]; then temp=" "; fi done ./cleanLines $1 done 如果,则需要在后面添加空格 if[[ line =

当我编写脚本并运行它时,它会说: 关于[[line==temp]]的文件意外结束。 我试图从文件中读取行并删除文件中的所有重复。 cleanFiles删除所有空行

while read line; do
    while read temp; do
        if[[ line == temp ]]; then
            temp=" ";
        fi
    done
./cleanLines $1
done

如果,则需要在
后面添加空格

if[[ line == temp ]]; then   # wrong
if [[ line == temp ]]; then  # still wrong, but see below
但这仍然比较了文本字符串
line
temp
。如果要引用变量的值,则需要
$
符号:

if [[ "$line" == "$temp" ]]; then # right

“$temp”
上的双引号防止将其解释为全局模式;我还在
“$line”
上添加了双引号,只是为了对称。

如果
,则需要在
后面添加空格

if[[ line == temp ]]; then   # wrong
if [[ line == temp ]]; then  # still wrong, but see below
但这仍然比较了文本字符串
line
temp
。如果要引用变量的值,则需要
$
符号:

if [[ "$line" == "$temp" ]]; then # right

“$temp”
上的双引号防止将其解释为全局模式;我还在
“$line”
上添加了双引号,只是为了对称。

嘿,伙计们,我还有一个问题——我是bash新手,我需要合并几个文件,删除重复并按字母顺序排序。我不允许使用临时文件。CleanLines脚本正在执行echo。我可以将其重定向到合并脚本,然后再次重定向合并以删除重复,最后再次重定向以对脚本进行排序。这是最简单的方法吗?

嘿,伙计们,我还有一个问题——我是bash新手,我需要合并几个文件,删除重复,并按字母顺序排序。我不允许使用临时文件。CleanLines脚本正在执行echo。我可以将其重定向到合并脚本,然后再次重定向合并以删除重复,最后再次重定向以对脚本进行排序。这是最简单的方法吗?

您可能可以使用以下命令:
cat file_name.txt | uniq>>output.txt
请查看:@ryekayo:更简单:
uniq file_name.txt>>output.txt
。Omer:您想只删除相邻的重复,还是删除所有重复?如果输入由3行按顺序排列的
foo
bar
foo
组成,是否要同时打印
foo
?@ryekayo,
uniq>output.txt
是一种更有效的书写方式。从
cat
读取管道要比直接文件描述符慢得多。我也会考虑<代码>排序-U/COD>而不是<代码> UNIQ,它只在输入是预先排序的情况下工作。您可以使用:<代码> CAT文件名。TXT·Unq>输出。请查看:@ Rykayo:更简单:<代码> UNIQ文件名> TXT>输出。TXT < /代码>。Omer:您想只删除相邻的重复,还是删除所有重复?如果输入由3行按顺序排列的
foo
bar
foo
组成,是否要同时打印
foo
?@ryekayo,
uniq>output.txt
是一种更有效的书写方式。从
cat
读取管道要比直接文件描述符慢得多。我也会考虑<代码>排序-U/COD>而不是<代码> UNIQ,它只在输入被预排序时起作用。@ Jahid:好捕获,固定。嘿,伙计们,谢谢你们的帮助。我会检查一下它是否有效,然后告诉你。@OmeriYahu:不客气。(顺便说一句,表达感谢的通常方式是向上投票和/或接受一个答案——如果你认为这是一个好的答案,或者它解决了你的问题。)@Jahid:除非脚本的输入是直接从文件中执行的。此外,你应该至少在比较的右侧加上双引号(即,
[$line=“$temp”]
),否则它将作为一个全局模式而不是一个文本字符串进行比较。@Jahid:捕捉得好,修复了。嘿,伙计们,谢谢你们的帮助。我会检查一下它是否有效,然后告诉你。@OmeriYahu:不客气。(顺便说一句,表达感谢的通常方式是向上投票和/或接受一个答案——如果你认为这是一个好的答案,或者它解决了你的问题。)@Jahid:除非脚本的输入是直接从文件中执行的。此外,你应该至少在比较的右侧加上双引号(即,
[$line=“$temp”]
),否则,它将作为全局模式而不是文本字符串进行比较。