【发布时间】:2023-01-13 11:56:03
【问题描述】:
如果我转义反斜杠并告知“f”不是有效的转义序列选择器,我会收到错误消息,指出无法在 C:\file\dir\location 找到文件。
setup_script = file(C:\\Users\\me\\folder\\file.sh
我尝试过转义 (\)、正斜杠 (/)、双转义 (\)。
【问题讨论】:
标签: windows terraform escaping backslash
如果我转义反斜杠并告知“f”不是有效的转义序列选择器,我会收到错误消息,指出无法在 C:\file\dir\location 找到文件。
setup_script = file(C:\\Users\\me\\folder\\file.sh
我尝试过转义 (\)、正斜杠 (/)、双转义 (\)。
【问题讨论】:
标签: windows terraform escaping backslash
您的问题中显示的表达式在更多方面无效,而不仅仅是文件名:文件名不在引号中,并且缺少 file 函数调用的右括号 )。
Terraform 模块通常不应在其中包含硬编码的绝对路径,因为这使得它们只能在一台特定计算机上工作,但如果您做想要写一个绝对路径那么典型的方法是使用正斜杠:
setup_script = "c:/Users/me/folder/file.sh"
您也可以使用具有相同含义的转义反斜杠 \ 来编写它,但这不是那么可读,因此正斜杠是通常的约定。
模块通过与 path.module 连接来引用其自己目录中的文件更为常见:
setup_script = "${path.module}/file.sh"
如果你这样做,那么你必须使用正斜杠,因为 path.module 结果也将使用正斜杠,Windows 要求整个路径在使用反斜杠或正斜杠方面保持一致。请注意,上面的 path.module 示例也是可移植的:此结果在 Unix 系统上也有效,因为 Terraform 随后将为 path.module 生成一个 Unix 兼容的路径。
【讨论】: