繁体   English   中英

意外标记附近的语法错误 `{ - bash

[英]syntax error near unexpected token `{​ - bash

​​​​​defineColumns() {
​​​​​​​    shift
    local dirfun=${​​​​​​​​1:-"/var/log/was/dial"}​​​​​​​​
    local basefun=${​​​​​​​​2:-"$logdir/party_info.$(date +%y%m%d%H%M%S)"}​​​​​​​​
    touch $logbase_bcdb
    info $dirfun $basefun
    # Run steps sequentially
    loadData
}

我正在编写一个 shell 脚本代码,我在其中编写了多个函数。 上述功能是抛出错误为:靠近意外的标记语法错误`{什么是错误的代码?

代码中有非打印字符:Unicode U+200B ZERO WIDTH SPACE。 删除它们,你应该没事。

首先要查看它们,您可以使用cat -A但它将这些字符显示为M-bM-^@M-^K ,这让 IMO 感到困惑。 我宁愿阅读 Python ascii()表示,所以这里有一个快速脚本:

import fileinput

for line in fileinput.input():
    print(ascii(line))

将其另存为 ascii_lines.py,然后使用脚本名称运行:

$ python3 ascii_lines.py filename.sh
'\u200b\u200b\u200b\u200b\u200bdefineColumns() {\n'
'\u200b\u200b\u200b\u200b\u200b\u200b\u200b    shift\n'
'    local dirfun=${\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b1:-"/var/log/was/dial"}\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\n'
'    local basefun=${\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b2:-"$logdir/party_info.$(date +%y%m%d%H%M%S)"}\u200b\u200b\u200b\u200b\u200b\u200b\u200b\u200b\n'
'    touch $logbase_bcdb\n'
'    info $dirfun $basefun\n'
'    # Run steps sequentially\n'
'    loadData\n'
'}\n'

然后要删除它们,您可以使用sed ,尽管它不知道 Unicode,所以我在这里使用 Bash $''字符串来解决这个问题。

$ sed -i $'s/\u200b//g' filename.sh

然后:

$ python3 ascii_lines.py filename
'defineColumns() {\n'
'    shift\n'
'    local dirfun=${1:-"/var/log/was/dial"}\n'
'    local basefun=${2:-"$logdir/party_info.$(date +%y%m%d%H%M%S)"}\n'
'    touch $logbase_bcdb\n'
'    info $dirfun $basefun\n'
'    # Run steps sequentially\n'
'    loadData\n'
'}\n'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM