linux命令 回显写入文本,关于linux:Shell-将变量内容写入文件

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

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

我在执行此操作时遇到问题。 这是我尝试过的:

cp $var $destfile

我还用dd命令尝试了相同的操作...显然,shell认为$var是指目录,因此告诉我找不到该目录。

我该如何解决?

请通过发布一些格式正确的代码来改善您的问题,这些代码应显示您如何填充变量以及所有相关错误消息的显示形式。

"将变量的内容复制到目录"是什么意思? $var是否指定文件名或应写入文件的某些文本? 如果指定文本,那么您要向其中写入此内容的文件的名称是什么?

$ var包含我要复制的文本,应该将其写入的文件是用户定义的,因此,我首先使用变量的原因。

也许$destdir应该被命名为$destfile,所以它不会引起误解...名称$destdir建议它指定目录而不是文件。 这将使您的整个问题变得直截了当且易于理解。

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

需要更多的引号-现在,将变量值内的任何空白运行都转换为单个空格,将扩展glob表达式,依此类推。

谢谢,@ CharlesDuffy我总是忽略引号,尤其是。用于文件名中的空格

另一件事-在右引号和"$destdir"]中的]之间需要一个空格。

echo还将尾随换行符添加到变量中。

如果$var是-e text to append,这将失败,并且实际上不会写入-e

抱歉,我的意思是-e

我确实使用过echo命令,但是它从变量中包含的字符串中去除了换行符。因此,这在某些情况下不起作用。

因为echo $var依赖于shell来扩展变量,所以它对于空白和特殊字符等内容并不太有用。您可以改用perl -e print($ENV{var}),它将精确输出变量的值。

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

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

如果变量字符串中有换行符(例如,三重引号或heredoc),则printf也很好。 echo不能很好地处理换行符。

@beeflobill您能解释一下" echo如何不能很好地处理换行符"。我所看到的唯一一件事就是echo添加了换行符。这确实使echo"$var"> destfile错误。

@SensorSmith在我的实验中,我看到当字符串具有" n"时,该回显将打印换行符。但是,如果字符串具有实际的换行符,则echo不会将其打印出来。我不知道为什么。

基本上是可移植性(和可靠性)问题。 unix.stackexchange.com/a/65819…或对于我们当中的致命人员:printf更好,请继续。

如果您的变数,上述答案均无效:

以-e开头

以-n开头

以-e开头

包含\,后跟n

不应在其后附加多余的换行符

因此,不能依靠它们获取任意字符串内容。

在bash中,您可以将" here字符串"用作:

cat <<"$destdir"

据我所知,cat总是在文件末尾插入换行符,而不管变量末尾没有换行符(尽管在大多数情况下这是一件好事)。使用printf的答案似乎是避免插入尾随换行符。

如果我没看错,您想将$var复制到文件中(如果是字符串)。

echo $var > $destdir

这是怎么做的。使用cp命令将使Shell将第一个参数解释为文件或目录的名称。

如果不将$var括在引号中,则在某些情况下文件的内容与$ vars内容不是100%相等。例如,当"回显"包含RSA密钥的var时,您在文件中得到无效的密钥。

如果$var包含空格或-e,则失败

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

我通过您的问题假设$var包含要复制到文件中的内容:

$echo"$var">"$destdir"

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

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

如果var包含-e,则失败

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Linux中,可以使用命令行工具或者文本编辑器来写入内容。其中,命令行工具包括echo、cat、printf等,可以直接在终端中输入命令写入内容。例如,使用echo命令可以将内容输出到终端或者写入文件中: echo "hello world" > file.txt 这个命令会将字符串"hello world"写入到file.txt文件中。 另外,也可以使用文本编辑器来写入内容,比如vi、nano等。打开文本编辑器后,可以输入内容并保存到文件中。例如,在vi编辑器中,可以按下i键进入插入模式,然后输入内容,最后按下Esc键退出插入模式,输入:wq保存并退出编辑器。 总之,在Linux写入内容有多种方法,可以根据具体情况选择合适的方式。 ### 回答2: 在Linux系统中,我们可以使用多种方式在文本文件写入内容。 1. 使用命令文本编辑器Vi或Vim Vi或Vim是Linux系统中常用的文本编辑器之一,可以使用命令行的方式打开并编辑文件。具体步骤如下: (1)打开需要编辑的文件:vi filename (2)按下“i”键,进入编辑模式 (3)输入要写入内容 (4)按下“ESC”键退出编辑模式 (5)输入“:wq”保存并退出编辑器 2. 使用Echo命令 Echo命令可以直接在命令行中输出文本,也可以将文本输出到指定的文件中。具体步骤如下: (1)打开终端窗口 (2)输入命令:echo "要写入内容" > filename (3)这样就可以把内容写入到指定的文件中了 3. 重定向符号 在命令行中,我们可以使用重定向符号“>”来把文本写入到指定的文件中。具体步骤如下: (1)打开终端窗口 (2)输入命令:cat > filename (3)按下“Enter”键进入编辑模式,写入需要添加的内容 (4)按下“Ctrl+D”键保存并退出 以上三种方法都可以很方便地帮助我们在Linux系统中写入文本内容。具体使用哪种方法取决于个人习惯和具体的应用场景。 ### 回答3: 在Linux中向文本文件写入内容有很多种方法,其中最常用的方法是使用文本编辑器。下面我们将详细介绍如何使用几种不同的文本编辑器在Linux写入文本内容。 1. 使用vim编辑器 vim是Linux中最常用的文本编辑器之一。要使用vim编辑器写入文本内容,可以按照以下步骤: 1. 打开终端,输入vim命令进入vim编辑器。 2. 按下i键,进入“插入模式”。 3. 在编辑器中写入需要的文本内容。 4. 按下Esc键退出“插入模式”。 5. 输入:wq命令保存并退出。 2. 使用nano编辑器 nano是Linux中另一种常用的文本编辑器。要使用nano编辑器写入文本内容,可以按照以下步骤: 1. 打开终端,输入nano命令进入nano编辑器。 2. 在编辑器中写入需要的文本内容。 3. 按下Ctrl+O键保存文件。 4. 按下Ctrl+X键退出nano编辑器。 3. 使用echo命令Linux中可以使用echo命令文本文件写入内容。要使用echo命令写入文本内容,可以按照以下步骤: 1. 在终端输入echo命令,后面跟上需要写入文本内容,例如 echo "hello world"。 2. 使用重定向符号(>)将echo输出的内容重定向到指定的文本文件中,例如 echo "hello world" > demo.txt。 总之,Linux中有多种不同的方法可以写入文本内容,选择任意一种方法都可以完成任务。个人认为,使用vim和nano编辑器更加适合写入较长的文本内容,而使用echo命令适合写入简单的文本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值