令人困惑的令牌语法

时间:2018-01-29 23:14:21

标签: bash awk syntax syntax-error syntax-highlighting

尝试在脚本中创建一个命令,以纯文本打印出一个命令,并执行它的作用示例,但是让我失望的是涉及('的愚蠢语法字符

它告诉我

syntax error near unexpected token `('

在此命令中

openssl rand -base64 37 | awk BEGIN{FS=””} for (i=1; i<=37; i++) printf( "%s",$i );} {printf "\n"}'

我已经在各个地方读到你需要双引"这些东西或类似东西,但它不起作用。我没有看到问题出在哪里,它应该只是工作,我尝试添加双打"单身'(( )),但它们甚至都不起作用。它为什么抱怨('毫无意义。我在Sublime Text中打开了这个,它没有向我显示任何语法错误,因为它有Bash的语法高亮,它会告诉我是否存在语法错误,而且显然不是。

1 个答案:

答案 0 :(得分:2)

如果你从小处开始构建,而不是编写完整的命令然后尝试调试它,你将省去很多麻烦。

现在,这是你应该拥有的命令:

openssl rand -base64 37 | awk ''

然后你可以开始添加它:

openssl rand -base64 37 | awk 'BEGIN{}'

到目前为止一直很好,现在增加更多:

$ openssl rand -base64 37 | awk 'BEGIN{FS=””}'
awk: syntax error at source line 1
 context is
         >>> BEGIN{FS=� <<<

现在您已将一个问题缩小到FS=””部分,而不是尝试同时在80个字符的命令中调试三个单独的语法错误:

  1. 您需要一个开场'
  2. 您必须使用ascii引号,而不是倾斜的unicode引号
  3. 在for循环之前,你错过了一个开头{
  4. 但您可以使用head -c简化所有这些:

    openssl rand -base64 37  | head -c 37