Linux Shell-将变量内容写入文件
我想将变量(这里称为Linux Shell-将变量内容写入文件,linux,bash,shell,Linux,Bash,Shell,我想将变量(这里称为var)的内容复制到一个文件中 文件名存储在另一个变量destfile中 我做这件事有困难。以下是我尝试过的: cp $var $destfile 我也用dd命令做了同样的尝试。。。显然,shell认为$var是指一个目录,因此告诉我找不到该目录 如何解决此问题?使用echo命令: var="text to append"; destdir=/some/directory/path/filename if [ -f "$destdir" ] then echo
var
)的内容复制到一个文件中
文件名存储在另一个变量destfile
中
我做这件事有困难。以下是我尝试过的:
cp $var $destfile
我也用dd命令做了同样的尝试。。。显然,shell认为$var
是指一个目录,因此告诉我找不到该目录
如何解决此问题?使用
echo
命令:
var="text to append";
destdir=/some/directory/path/filename
if [ -f "$destdir" ]
then
echo "$var" > "$destdir"
fi
if
测试$destdir
是否表示文件
在截断文件后追加文本。如果您只想将$var
中的文本附加到文件现有内容,请改用>
:
echo "$var" >> "$destdir"
cp
命令用于复制文件(到文件),而不是将文本写入文件。如果我没听错,您希望在文件(如果是字符串)中复制$var
当您说“复制变量的内容”时,该变量是包含文件名,还是包含文件名
根据您的问题,我假设$var
包含要复制到文件中的内容:
$ echo "$var" > "$destdir"
这将把$var的值回显到名为$destdir的文件中。请注意引号。将“$var”括在引号中非常重要。如果名称中有空格,也适用于“$destdir”。要附加它:
$ echo "$var" >> "$destdir"
如果变量:
- 以
-e
- 以
-n
- 以
-E
- 包含一个
后跟一个\
n
- 不应在其后面附加额外的换行符
catecho
有一个问题,即如果var
包含类似-e
的内容,它将被解释为一个标志。另一个选项是printf
,但是printf“$var”>“$destdir”
将展开变量中的任何转义字符,因此如果变量包含反斜杠,文件内容将不匹配。但是,由于printf
仅将反斜杠解释为格式字符串中的转义符,因此可以使用%s
格式说明符将确切的变量内容存储到目标文件:
printf“%s”$var“>“$destdir”
上述所有工作,但也必须解决一个不需要首先出现的问题(转义和特殊字符):由shell展开变量时的特殊字符。首先不要这样做(变量展开)。直接使用变量,无需展开
此外,如果您的变量包含一个秘密,并且您希望将该秘密复制到文件中,那么您可能不希望在命令行中进行扩展,因为shell命令的跟踪/命令回显可能会泄露该秘密。也就是说,所有在命令行中使用$var
的答案都可能存在潜在的安全风险,因为它们将变量内容暴露在shell的跟踪和日志中
使用以下命令:
printenv var >file
这意味着,对于OP问题:
printenv var >"$destfile"
注意:变量名称区分大小写。请发布一些代码,显示如何填充变量,以及所有相关错误消息,以改进您的问题。将变量内容复制到目录是什么意思?$var
是否指定应写入文件的文件名或某些文本?如果它指定文本,那么,您要将此内容写入的文件的名称是什么?$var包含我要复制的文本,并且它应该写入的文件是用户定义的,因此我首先使用变量的原因。也许$destdir
应该命名为$destfile
,这样不会产生误导。。。名称$destdir
表明它指定的是目录而不是文件。这会让你的整个问题变得简单易懂,这就是为什么。使用cp
命令将使shell将第一个参数解释为文件或目录的名称。如果未将$var
括在引号中,则在某些情况下,文件的内容与$var的内容不是100%相等。例如,当“回显”包含RSA密钥的变量时,文件中的密钥无效。如果$var
包含空格或-e
需要更多引号,则会失败。此时,变量值中的任何空格都将转换为单个空格,全局表达式将展开,等等。还有一件事——在“$destdir”]
echo
中的结束引号和]
之间需要一个空格。如果$var
是要追加的-e文本,则此操作将失败,实际上并没有编写-e
,因为echo$var
依赖于shell来扩展变量,所以它在处理空格和特殊字符时不起作用。您可以使用perl-e'print($ENV{var})
,它将精确地输出变量的值。如果var
包含-e
将双连字符作为第一个参数传递给echo
终止其选项列表,则会失败。@Eric:echo--“$var”>“$destfile”
printf也适用于变量字符串中有换行符的情况,如来自三引号或herdoc的换行符。echo不能很好地处理换行符。@beeflobill你能解释一下“echo不能很好地处理换行符”吗。我唯一看到的是echo添加了一个新行。这确实使echo“$var”>destfile
出错。@在我的实验中,我发现当字符串有“\n”时,echo将打印一个换行符。但是,如果stri
printenv var >file
printenv var >"$destfile"