加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 重定向文本时缩进代码

发布时间:2020-12-15 21:17:30 所属栏目:安全 来源:网络整理
导读:我想知道这个问题是否有解决方案. 在我的shell脚本中,我有一些代码将一些文本重定向到一个文件: if [ condition ]; then cat /outputfile EOFtext123text345text456EOFfi 问题是我想在我的代码中缩进textxxx,但是如果我这样做,那么重定向的文本中会有空格.
我想知道这个问题是否有解决方案.

在我的shell脚本中,我有一些代码将一些文本重定向到一个文件:

if [ condition ]; then
   cat > /outputfile <<EOF
text123
text345
text456
EOF
fi

问题是我想在我的代码中缩进textxxx,但是如果我这样做,那么重定向的文本中会有空格.

有没有办法可以很好地缩进代码并使输出文件没有空格.

解决方法

标准答案是使用前导标签(它们必须是标签,而不是空格)和 – 在’单词’之前:

cat <<-'EOF'
        Tab-indented text
    Blank-indented text
EOF

哪个(如果在’Tab-indented’之前有一个或多个实际标签)将输出:

Tab-indented text
    Blank-indented text

如果这太不方便了,那么另一种方法是使用sed而不是cat:

sed 's/^[     ]*//' <<EOF
    Randomly
        Indented
  Text
EOF

这将输出:

Randomly
Indented
Text

(同样,你必须确保在正确的位置有选项卡;这里,这意味着在sed命令中的正则表达式.或者你可以使用sed的/ ^ [[:space:]] * //’如果你更喜欢.)

请注意,使用’EOF’与EOF会影响这里文档的正文是如何被解释的.相比:

cat <<-EOF
        $(rm -fr *)  # Do not try this at home! (Or at work.)
        $HOME
EOF

cat <<-'EOF'
        $(rm -fr *)
        $HOME
EOF

第一个将使shell识别$(…)表示法并执行命令并将输出(无)替换为here文档.对于你在过去一两年里所做的工作感到抱歉!希望你有很好的备份.第二个将逐字处理脚本的内容除了删除前导标签 – 这更安全,但任何符号如$(rm -fr *)都不是很安全!变量$HOME将在第一个版本中扩展;它将在第二个保持不变.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读