Zaz*_*aza 10 linux bash sed echo centos7
尝试创建一个小脚本,能够在输出文件中编写一部分脚本而不做任何更改(按原样)
源文件文本
echo "
yellow=`tput setaf 3`
bel=`tput bel`
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0
echo"#${green}Installing packages${reset}#" &&
" >> output.txt
Run Code Online (Sandbox Code Playgroud)
期望的输出:
yellow=`tput setaf 3`
bel=`tput bel`
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0
echo"#${green}Installing packages${reset}#" &&
Run Code Online (Sandbox Code Playgroud)
我得到的是:
yellow=^[[33m
bel=^G
red=^[[31m
green=^[[32m
reset=^[(B^[[m
echo"#${green}Installing packages${reset}#" &&
Run Code Online (Sandbox Code Playgroud)
使用CentOS 7最小的全新安装寻找一个适用于完整脚本/文本的解决方案,每行没有变化,我想也可以使用sed来完成...
Nic*_*ick 25
你需要逃避反引号(`):
#!/bin/bash
echo "
yellow=\`tput setaf 3\`
bel=\`tput bel\`
red=\`tput setaf 1\`
green=\`tput setaf 2\`
reset=\`tput sgr0\`
" >> output.txt
Run Code Online (Sandbox Code Playgroud)
我更喜欢将此方法用于多行:
#!/bin/bash
cat << 'EOF' >> output.txt
yellow=$(tput setaf 3)
bel=$(tput bel)
red=$(tput setaf 1)
green=$(tput setaf 2)
reset=$(tput sgr0)
EOF
Run Code Online (Sandbox Code Playgroud)
使用单引号防止扩展:
echo '
yellow=`tput setaf 3`
bel=`tput bel`
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
' >> output.txt
Run Code Online (Sandbox Code Playgroud)
有关更多详细信息,请参见双引号和单引号之间的区别。
如果您的文本包含单引号,则以上内容可能无效。在这种情况下,使用here文档会更安全。例如,上面会,如果你插入换行符:var='something'。
使用此处文档将是这样的:
cat >> output.txt <<'EOF'
yellow=`tput setaf 3`
bel=`tput bel`
red=`tput setaf 1`
green=`tput setaf 2`
reset=`tput sgr0`
var='something'
EOF
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20963 次 |
| 最近记录: |