我想将变量(此处称为var)的内容复制到文件中.
文件名存储在另一个变量中destfile.
我这样做有问题.这是我尝试过的:
cp $var $destfile
Run Code Online (Sandbox Code Playgroud)
我也用dd命令尝试了同样的事情......显然shell认为$var是指一个目录,所以告诉我找不到目录.
我该如何解决这个问题?
pb2*_*b2q 117
使用echo命令:
var="text to append";
destdir=/some/directory/path/filename
if [ -f "$destdir" ]
then
echo "$var" > "$destdir"
fi
Run Code Online (Sandbox Code Playgroud)
代表文件的if测试$destdir.
该>附加截断文件之后的文本.如果您只想将文本附加$var到文件现有内容中,请>>改为使用:
echo "$var" >> "$destdir"
Run Code Online (Sandbox Code Playgroud)
该cp命令用于复制文件(到文件),而不是用于将文本写入文件.
Tre*_*awa 24
echo有问题,如果var包含类似的东西-e,它将被解释为一个标志.另一种选择是printf,但printf "$var" > "$destdir"会扩展变量中的任何转义字符,因此如果变量包含反斜杠,则文件内容将不匹配.但是,因为printf只在格式字符串中将反斜杠解释为转义,所以可以使用%s格式说明符将确切的变量内容存储到目标文件中:
printf "%s" "$var" > "$destdir"
Eri*_*ric 18
如果您的变量,上述答案都不起作用:
-e-n-E\后跟一个n所以他们不能依赖任意字符串内容.
在bash中,您可以使用"here strings"作为:
cat <<< "$var" > "$destdir"
Run Code Online (Sandbox Code Playgroud)
如果我理解你正确,你想复制$var一个文件(如果它是一个字符串).
echo $var > $destdir
Run Code Online (Sandbox Code Playgroud)
上述所有工作,但还必须解决一个不需要首先出现的问题(转义和特殊字符):当变量被 shell 扩展时的特殊字符。首先不要这样做(变量扩展)。直接使用变量,无需扩展。
此外,如果您的变量包含一个秘密并且您想将该秘密复制到一个文件中,您可能不希望在命令行中进行扩展,因为 shell 命令的跟踪/命令回显可能会泄露该秘密。意味着,$var在命令行中使用的所有答案都可能通过将变量内容暴露给 shell 的跟踪和日志记录而具有潜在的安全风险。
用这个:
printenv var >file
Run Code Online (Sandbox Code Playgroud)
这意味着,对于 OP 问题:
printenv var >"$destfile"
Run Code Online (Sandbox Code Playgroud)
注意:变量名区分大小写。