here-document 固然不错,但是它会弄乱 shell 脚本的格式。为了提高可读性,你希望能对其作缩进处理。
解决方案
使用 <<-
,然后就可以在每行的开头用制表符(仅限制表符!
)缩进 shell 脚本中的 here-document 部分:
$ cat myscript.sh
...
grep $1 <<-'EOF'
lots of data
can go here
it's indented with tabs
to match the script's indenting
but the leading tabs are
discarded when read
EOF
ls
...
$
讨论
<<
之后的连字符(-
)足以告诉 bash 忽略前导制表符。但这仅适用于制表符,其他空白字符是无法忽略的。注意,对于 EOF 或者选用的其他标记,这一点尤为重要。如果出现了空格,就无法将 EOF 识别为结束标记,here-document 的数据部分就会一直延续到文件结尾(吞掉剩余的脚本)。出于安全起见,你可以始终左对齐 EOF(或其他标记)。
就像结尾处的 EOF 标记中出现的任何拖尾空白字符都会导致其无法被识别为结束标记一样,使用除制表符外的前导字符也会造成同样的后果。如果你的脚本使用空格或混合空格和制表符来进行缩进,可别在 here-document 中这么做。要么使用制表符,要么什么都不用。另外,小心有些文本编辑器会自动将制表符替换成空格。
酷客网相关文章:
评论前必须登录!
注册