AIX系统中IFS '\n'无法正常工作

3

我希望能读取一个包含多行内容的文件,并且原样输出。但是在AIX系统中,我的IFS换行符并没有按照预期工作。

以下是我的脚本:

#!/bin/ksh

#set -x
old_IFS=$IFS      # save the field separator
IFS=$'\n'
LABELFILE=/home/david/label.txt
OUTPUT_FILE=/home/david/label_out.txt

for i in $(cat $LABELFILE)
do
echo "$i" >> $OUTPUT_FILE
done

label.txt

Hello nancy
naghu naghu
Hello navy
You are naughty
Good niece

我的输出文件(label_out.txt ->
Hello
a
cy

aghu
aghu
Hello
avy
You are
aughty
Good
iece

预期输出->

Hello nancy
naghu naghu
Hello navy
You are naughty
Good niece

1
在单引号内,\n 表示反斜杠和字母 n。在双引号内,它可能表示换行符,但通常不会(除了在 bash 中)。 - Jonathan Leffler
除了单引号'\n'的问题(对于这个问题,您有解决方法),整个for i in $(cat $file) 的写法非常奇怪。使用read 加上I / O重定向会更好(请注意,您强制shell将整个文件读入内存,然后一次输出一行,而不是让其一次读取一行。) - Jonathan Leffler
这要看情况。read内置函数需要在每次执行后将文件指针放在正确的位置,因此它往往会进行更多的系统调用(当从管道读取时,需要逐字节读取,而且在从其他类型的文件读取时也经常发生)。如果文件足够大,以至于从cat派生的开销可以分摊,并且足够小,可以轻松地将其放入内存中,则使用for i in $(cat $file)方法可能更快。 - jilles
1个回答

8

尝试:

IFS='
'

(这里只有一个回车,没有额外的空格。)


(IT技术相关内容待翻译)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接