methods() {
cat <<-!
start
stop
restart
reload
status
methods
!
}
这是否正确我收到错误
syntax error: unexpected end of file
答案 0 :(得分:6)
对于古代shell中的here-docs,你必须完全匹配标签。这意味着:
methods() {
cat <<!
start
stop
restart
reload
status
methods
!
}
是的,在该行的开头,虽然你可以做一些棘手的事情,比如cat <<'^I!'
将标记设置为单个标签,后跟!
。
现在bash
(以及可能更早的shell)修复了<<-
变体,它在处理之前剥离了数据行和结束标记的所有前导标签。这样,你仍然可以很好地缩进:
methods() {
cat <<-!
start
stop
restart
reload
status
methods
!
}
但是,请注意附带条件:它剥离标签,一般不是空格。如果在!
个字符之前的任何地方有空格(或任何非制表符,可打印或其他字符),它就无法工作。
如果您正在使用vi
,则可以输入:set list
以更好地查看不可打印字符,否则xd
或od -xcb
可以为您提供文件的十六进制转储。