我有一个名为“-diary.txt-”的文件,我需要获取它的内容。当尝试使用 读取它时echo < "-diary.txt-"
,它返回一个空白字符串。我做了一些研究,并得出了这个:echo "$(<-diary.txt-)"
。我在我的电脑上测试了一下,它运行得很好,但是当我登录服务器时,它仍然返回一个空字符串。我只能使用这些命令:
. : [ [[ alias bg break cd chdir command continue echo eval exec exit export false fg getopts hash help history jobs kill let local printf pwd read readonly return set shift source test times trap true type ulimit umask unalias unset wait
。我应该怎么办?
答案1
$(<file)
是 Korn shell 的一个特殊结构,现在也得到了其他一些结构的支持,包括zsh
和bash
,但仅此而已(请参阅了解 Bash 的读取文件命令替换)。
在不支持它的类 POSIX shell 上,它只会扩展为空。
在您的命令列表中,read
似乎只能以read
有用的方式输入。echo
不读取任何内容,它只是在选项处理和转换后输出其参数。
while IFS= read -r line || [ -n "$file" ]; do
printf '%s\n' "$line"
done < -diary.txt-
应一次读取一行内容并打印每一行printf
(不是echo
不能用于任意数据)。此处使用的所有三个命令([
、read
和printf
)都在您的列表中,while; do; done
和||
是 shell 的语言结构。
只要文件不包含 NUL 字符就应该有效。如果文件不以换行符结尾,则会将其添加到输出中。
假设 shell 是类似 POSIX-sh 的,但考虑到命令列表(其中许多通常是sh
内置命令),这种情况很有可能发生。
1,.
又名source
也可以读取文件,但它也会尝试将其读取的内容解释为 shell 代码,因此这没有用。