<"$fileVariableName"> 在 csh 中做什么?

What does <"$fileVariableName"> do in csh?

我正在使用 cshell 中的 sed 命令查看现有脚本,除了一个组件外,我了解所有脚本。我已经简化了它以共享一个示例,但在下面,$templateFile 被用作输入,并且“hello”的所有实例都被替换为“world”,一旦完成,它就会输出到输出目录并命名为输出文件名。

sed -e 's:hello:world:g' <"$templateFile"> "$outputDir"/"$outputFileName".txt

但是,我不明白“$templateFile”周围的<>是做什么的?为什么 sed 输入文件必须有 <>?在所有对 sed 的描述中,我找不到关于它可能服务于什么目的的解释,所以我有点困惑。

我知道这是一个简单的问题,但我无法在网上找到答案,如果您能在这里得到任何说明,我将不胜感激。谢谢。

您正在审查的代码对空格的使用具有误导性。更具可读性的版本可能如下所示:

sed -e 's:hello:world:g' <"$templateFile" >"$outputDir/$outputFileName.txt"

像往常一样,<infile 将标准输入从 infile 重定向,>outfile 将标准输出重定向到 outfile

与其他重定向一样,所有这些都发生在 sed 开始之前; sed 本身对 shell 如何解释命令的这些部分没有影响或控制。

<>stream redirection operators

您不需要 < 运算符,因为 sed 在 sed 命令后接受文件名参数。

如果您打算将 sed 替换结果保存在新文件中,则需要 >。如果您想“内嵌”保存文件内容,也没有义务使用 >。使用 GNU sed,你可以做到

sed -i 's:hello:world:g' "$templateFile"

使用免费 BSD sed,您可以

sed -i '' 's:hello:world:g' "$templateFile"

检查 sed edit file in place 问题。

你也不需要 -e,它只是表示下一个参数是 sed 命令。