Shell - 将可变内容写入文件

时间:2012-07-23 18:56:43

标签: linux bash shell

我想将变量(此处称为var)的内容复制到文件中。

文件名存储在另一个变量destfile中。

我这样做有问题。这是我尝试过的:

cp $var $destfile

我也尝试过用dd命令做同样的事情......显然shell认为$var指的是一个目录,所以告诉我找不到该目录。

我该如何解决这个问题?

6 个答案:

答案 0 :(得分:101)

使用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命令用于复制文件(文件),而不是用于将文本写入文件。

答案 1 :(得分:15)

echo存在的问题是,如果var包含-e之类的内容,则会将其解释为标记。另一个选项是printf,但printf "$var" > "$destdir"将展开变量中的任何转义字符,因此如果变量包含反斜杠,则文件内容将不匹配。但是,因为printf仅将反斜杠解释为格式字符串中的转义符,所以可以使用%s格式说明符将确切的变量内容存储到目标文件中:

printf "%s" "$var" > "$destdir"

答案 2 :(得分:10)

如果您的变量是

,则上述答案都不起作用
  • -e
  • 开头
  • -n
  • 开头
  • -E
  • 开头
  • 包含\后跟n
  • 不应在其后附加额外的换行符

因此不能依赖任意字符串内容。

在bash中,你可以使用" here strings"为:

cat <<< "$var" > "$destdir"

答案 3 :(得分:9)

如果我理解正确,你想在文件中复制$var(如果它是一个字符串)。

echo $var > $destdir

答案 4 :(得分:1)

当您说“复制变量的内容”时,该变量是否包含文件名,还是包含文件名?

我假设你的问题$var包含要复制到文件中的内容

$ echo "$var" > "$destdir"

这会将$ var的值回显到名为$ destdir的文件中。注意引号。将“$ var”括在引号中非常重要。如果名称中有空格,也适用于“$ destdir”。要追加它:

$ echo "$var" >> "$destdir"

答案 5 :(得分:1)

以上所有方法均有效,但还必须解决不需要首先发生的问题(转义符和特殊字符):外壳扩展变量时的特殊字符。只是首先不要这样做(可变扩展)。直接使用变量,无需扩展。

此外,如果您的变量包含机密,并且您想将该机密复制到文件中,则可能不希望在命令行中进行扩展,因为shell命令的跟踪/命令回显可能会泄露机密。意思是,在命令行中使用$var的所有答案都可能通过将变量内容暴露给外壳程序的跟踪和日志记录而具有潜在的安全风险。

使用此:

printenv var >file

这意味着,如果遇到OP问题:

printenv var >"$destfile"