美文网首页
bash的cat <

bash的cat <

作者: CodingCode | 来源:发表于2021-07-04 06:20 被阅读0次

    通常我们用cat <<EOF来把文本内容写入文件中去,例如

    cat > a.txt <<EOF
    This is a test file
    EOF
    

    这样会生成一个a.txt文件,内容包含一行文本。

    有两个特殊符号注意

    1. cat <<-EOF
      在EOF前面多了一个减号(-),作用是去除文本里面所有行的tab前缀。

    举例来说:

    cat >a.txt <<-EOF
    <tab>Line1
    <tab><tab>Line2
    <tab><tab>Line3<tab>Field<tab>
    EOF
    

    这个的运行结果:

    1. 使用<<-EOF
    Line1
    Line2
    Line3<tab>Field<tab>
    

    这个属性在一个有用的场景下就是整体缩进:

    if [ <cond-expression> ]; then
        cat >a.txt <<-EOF
          line 1
          line 2
          line X
        EOF
    fi
    

    整个代码结构显得比较整齐;这里要注意的是:

    • 内容行line 1, line 2, line X必须用<tab>作为前缀。
    • 结尾行EOF也必须用<tab>作为前缀。
    • 命令行cat没有要求,<tab>和空格都可以,因为它不是EOF的组成部分。
    1. 使用<<EOF
    <tab>Line1
    <tab><tab>Line2
    <tab><tab>Line3<tab>Field<tab>
    

    比较两个结果:

    1. 所有行的前缀<tab>全部被删除掉了。
    2. 空格前缀也不会被删除,只删除<tab>前缀。
    3. 中间和结尾处的<tab>也不会被删除,只删除前缀位置的<tab>。
    1. cat <<'EOF'

    就是把EOF用引号括起来(单引号和双引号一样),但是结尾处的EOF不要引号;起用法的差异是是否对文本进行变量扩展。

    距离来说:

    VAR="value"
    
    cat >a.txt <<EOF
    variabe is "${VAR}"
    EOF
    

    这个运行的结果是:

    variabe is "value"
    

    再加上引号:

    VAR="value"
    
    cat >a.txt <<'EOF'
    variabe is "${VAR}"
    EOF
    

    这回的运行结果:

    variabe is "${VAR}"
    

    这回的结果是变量${VAR}没有进行扩展,而是按原文写入到a.txt文本文件。

    相关文章

      网友评论

          本文标题:bash的cat <

          本文链接:https://www.haomeiwen.com/subject/hshmultx.html