为什么我的此处文档 (<<-) 给出语法错误?

发布于 2024-11-28 18:40:41 字数 243 浏览 0 评论 0 原文

methods() {
        cat <<-!
        start
        stop
        restart
        reload
        status
        methods
        !
}

这是正确的吗我收到错误

syntax error: unexpected end of file
methods() {
        cat <<-!
        start
        stop
        restart
        reload
        status
        methods
        !
}

Is this correct I am getting error

syntax error: unexpected end of file

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

甜味超标? 2024-12-05 18:40:41

对于古代 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 来更好地查看不可打印的字符,否则输入 xdod -xcb 可以为您提供文件的十六进制转储。

For here-docs in ancient shells, you have to match the tag exactly. That means:

methods() {
        cat <<!
        start
        stop
        restart
        reload
        status
        methods
!
}

Yes, at the start of the line, although you could do tricky things like cat <<'^I!' to set the marker to a single tab followed by !.

Now bash (and possibly earlier shells) fixed that with the <<- variant which strips off all leading tabs from your data lines and the end marker before processing. That way, you could still indent nicely:

methods() {
        cat <<-!
        start
        stop
        restart
        reload
        status
        methods
        !
}

But, note the proviso: it strips tabs, not whitespace in general. If you have spaces (or any non-tab character, printable or otherwise) anywhere before that ! character, it won't work.

If you're using vi, you can enter :set list to see the non-printable characters a bit better, otherwise xd or od -xcb can give you a hex dump of your file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文