Bash 重定向运算符 sed 命令

标签 bash shell

我正在接受 Google Cloud 培训,该培训使用 bash 脚本执行 sed 字符串替换,然后部署到端点服务。有这样的 bash 行,我就是无法理解......

mv "$temp_file" "$TEMP_FILE"
# Because the included API is a template, we have to do some string
# substitution before we can deploy it. Sed does this nicely.
< "$API_FILE" sed -E "s/YOUR-PROJECT-ID/${project_id}/g" > "$TEMP_FILE"

有人可以解释一下重定向运算符在“$API_FILE”扩展之前正在做什么吗?这是另一种写法吗:

sed -E "s/YOUR-PROJECT-ID/${project_id}/g" "$API_FILE" > "$TEMP_FILE"

我对行首的重定向运算符“<”的位置感到非常困惑。部署正在运行,因此这不是语法问题。

最佳答案

大多数人将重定向放在命令的末尾,但它们实际上可以出现在任何地方。它们可以位于其他参数的开头,甚至可以位于其他参数的中间(不推荐,但合法!)。

这些都是等效的:

< "$API_FILE" sed -E "s/YOUR-PROJECT-ID/${project_id}/g" > "$TEMP_FILE"
sed < "$API_FILE" -E "s/YOUR-PROJECT-ID/${project_id}/g" > "$TEMP_FILE"
sed -E < "$API_FILE" "s/YOUR-PROJECT-ID/${project_id}/g" > "$TEMP_FILE"
sed -E "s/YOUR-PROJECT-ID/${project_id}/g" < "$API_FILE" > "$TEMP_FILE"

关于Bash 重定向运算符 sed 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72520857/

相关文章:

linux - 如何使用完整路径从 bash 运行 resque 启动脚本

bash - 进程替换不适用于 sudo

linux - 使用idel命令在linux中编写shell脚本

linux - awk 在某些命令后不被识别

shell - fish shell : append argument to an existing function

java - 如何在调用继续进程时结束 C Shell 脚本

bash - gitlab runner 最后抛出 "Cleaning up file based variables 00:01 ERROR: Job failed: exit code 1"

linux - 为什么我在 shell 脚本中使用双引号

linux - 为什么这个字符串的值在 bash 脚本中被执行?

macos - 从 zsh shell 中的每一行中删除时间戳