我正在使用bash
并且对 的答案最感兴趣bash
,但是如果您愿意,您可以回答如何在其他 shell 中执行此操作。
我有一个环境变量 ,KEY
并且我想将该环境变量的值存储在 aa 文件中。目前我正在做
echo "${KEY}" > ./key.pem
在实践中这似乎没问题,但理论上这在KEY=-n
.
$ export KEY=-n
$ echo BEGIN "${KEY}" END
BEGIN -n END
$ echo "${KEY}" END
END$
那么,有没有更好的方法将单个环境变量的值存储在文件中?(请注意,export
并将declare
在其输出中包含变量的名称,这对我没有好处。)
如果它是为了稍后读取(在
bash
脚本中)而存储的,只需使用declare -p KEY
然后获取文件以再次读取它。如果您只想存储该值,printf '%s\n' "$KEY"
请像输出任何可变数据时那样使用。所以,
或者
或任何你需要输出的东西。
出现您的问题是因为它是in
-n
的有效选项。出于同样的原因,字符串和(以及类似的组合)也会在 中引起问题。根据构建方式或环境或选项,参数中的反斜杠字符也可能是一个问题。echo
bash
-e
-E
-neEne
bash
bash
以下问答中概述了这些问题以及更多问题:
许多系统都有一个
printenv
命令,将给定环境变量的内容后跟一个换行符输出到标准输出(printenv
出现在 70 年代后期的 3BSD 中):将变量的内容和
My Env Var
NL 存储到file
这些系统上的所有 shell 中。对于映射到 shell 变量的环境变量(至少包括名称以 ASCII 字母或下划线开头并后跟 0 个或多个 ASCII 字母、数字或下划线且不是 shell 设置的其他特殊变量的环境变量),在类似 Bourne 的 shell(也适用于
fish
),您可以这样做:(尽管如果未设置变量,那仍会在 中存储一个空行
file
)在
rc
-like shells 中(所有 shell 变量都映射到环境变量):(与上述相同的警告)
在
csh
-like 贝壳中:(如果未设置变量,它将失败并且不会覆盖
file
)一些实现/版本
ksh
没有printf
内置。在这些中,您还可以执行以下操作: