Linux – Bash将String重定向到文件
发布时间:2020-12-13 18:47:16 所属栏目:Linux 来源:网络整理
导读:我写了一个简单的脚本,它正在读取文件内容并在此文件中递增一个数字,然后我使用awk保持更改,当我尝试使用’’重定向新的String时整个字符串重定向到一行,而不是像原来的那样是4行. #!/bin/bash -x# This script is for Incrementing build numberspath=/home
我写了一个简单的脚本,它正在读取文件内容并在此文件中递增一个数字,然后我使用awk保持更改,当我尝试使用’>’重定向新的String时整个字符串重定向到一行,而不是像原来的那样是4行.
#!/bin/bash -x # This script is for Incrementing build numbers path=/home/RND/abrodov file=tst.txt tst=`cat $path/$file` printf "this is the content of the file before incrementing: n $tst" newexpr=`awk '/^Build Number/{$4=$4+1;}1' /home/RND/abrodov/tst.txt` printf "n the new content n $newexpr" echo $newexpr > $path/$file 这是运行脚本之前的原始文件: Major Release Number = 4 Minor Release Number = 1 Service Pack Release Number = 2 Build Number = 22 这是我使用脚本后的内容: Major Release Number = 4 Minor Release Number = 1 Service Pack Release Number = 2 Build Number = 23 我试图弄清楚如何重定向原始格式的文本,即4行. 解决方法
您需要用双引号包装变量:
echo "$newexpr" > "$path/$file" 在这种情况下,$path / $file周围的引号实际上并不是必需的,但它们没有任何危害. 更一般地说,你也应该使用$()而不是反引号: newexpr=$(awk '/^Build Number/{$4=$4+1;}1' "$path/$file") 如果要实现“就地”更改文件的效果,则无需使用变量.您可以使用这样的临时文件: awk '/^Build Number/{$4=$4+1;}1' "$path/$file" > /tmp/file && mv /tmp/file "$path/$file" 使用引号的重要性 双引号保留了数据的原始格式.请参阅此简单示例,该示例使用set -x激活调试模式. shell正在执行的命令显示在以.开头的行上.其实我看到你已经在使用#!/ bin / bash -x了. set -x做同样的事: $s="1 > 2" $set -x $echo $s + echo 1 2 1 2 $echo "$s" + echo '1 2' 1 2 原始字符串包含换行符,但是当您在没有引号的情况下回显它时,它将被解释为echo的两个参数,而不是包含换行符的一个参数.这称为场分裂.您可以通过阅读此this wiki article了解更多关于使用双引号的重要性. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |