For loop KSH for loop适用于Solaris/Mac,但不适用于Red Hat Linux

For loop KSH for loop适用于Solaris/Mac,但不适用于Red Hat Linux,for-loop,ksh,For Loop,Ksh,下面的Ksh脚本在Red Hat Linux系统上给了我“没有这样的文件或目录”错误消息。有人有解决办法吗 #!/usr/bin/ksh for f in `cat files.dat` do wc $f done 例如,files.dat有3行数据,每行都是脚本运行所在的当前目录中的一个文件 a.c a.h b.c 注意,如果从命令行运行,相同的for循环也会生成相同的错误消息 它适用于Solaris/Mac box,但不适用于Red Hat系统 谢谢。你应该正确引用你的论点,换句话说

下面的Ksh脚本在Red Hat Linux系统上给了我“没有这样的文件或目录”错误消息。有人有解决办法吗

#!/usr/bin/ksh
for f in `cat files.dat`
do
  wc $f
done
例如,
files.dat
有3行数据,每行都是脚本运行所在的当前目录中的一个文件

a.c
a.h
b.c
注意,如果从命令行运行,相同的for循环也会生成相同的错误消息

它适用于Solaris/Mac box,但不适用于Red Hat系统


谢谢。

你应该正确引用你的论点,换句话说,使用
“$f”
,而不是
$f
。 关于cat-主要记录在以下内容中:


可能更适合的是
xargs-一个文件wc

而不是
用于。。。cat
,您应该使用

while read -r f
do
    wc "$f"
done < files.dat
读取时-r f
做
wc“$f”
完成
当您确实需要执行命令替换时,应该使用
$()
而不是反勾号


但是您的问题可能是
a.c
等文件不存在,它们有不同的名称、名称中的不可见字符或
文件中的行尾。dat
是CR/LF(DOS/Windows样式)而不是
\n
(仅LF-Unix样式),或者文件中有奇数字符。

是错误吗“没有这样的文件或目录“为ksh或为files.dat生成?错误是针对a.c、a.h和b.c,因为
cat文件。dat
相当于a.c a.h b.c。目的是使用egrep匹配$f上的某些模式,并将grep的输出重定向到一个文件,但我得到了这个错误。”。然后我试着运行wc,但得到了相同的错误。因为我现在无法访问RH Box,所以明天我将尝试使用“$f”。谢谢。原始files.dat是使用导致错误的find命令的重定向输出创建的。我确实使用“od-c”命令验证了这个文件的内容,但是没有奇怪的字符。无论如何,谢谢你的及时回复。