Shell IFS'\n';在AIX盒中不工作
我试图读取一个有几行的文件,并按原样打印。 但我在IFS的新产品线并没有像预期的那样工作。这是在AIX中实现的 下面是我的剧本Shell IFS'\n';在AIX盒中不工作,shell,Shell,我试图读取一个有几行的文件,并按原样打印。 但我在IFS的新产品线并没有像预期的那样工作。这是在AIX中实现的 下面是我的剧本 #!/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"
#!/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
我的输出文件(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
尝试:
(只有回车符,没有多余的空格。)在单引号内,
\n
表示反斜杠和n
。在双引号内,它可能表示换行符,但(除了在bash
中)通常不是。与单引号的'\n'
问题(您有解决方法)分开,整个for i in$(cat$file)
的东西很奇怪。使用读取
加上i/O重定向,你会做得更好。(请注意,你强制shell读取内存中的整个文件,然后一次读取一行,而不是让它一次读取一行。)这取决于具体情况。read
builtin需要在每次执行后将文件指针保留在正确的位置,因此它将倾向于执行更多的系统调用(当从管道中读取时,需要一次读取一个字节,当从其他类型的文件中读取时,通常也会发生这种情况)。如果文件足够大,分叉cat
的开销可以摊销,并且足够小,可以轻松地放入内存,那么for i in$(cat$文件)
方法可能会更快。
Hello nancy
naghu naghu
Hello navy
You are naughty
Good niece
IFS='
'