变量声明被视为bash中的命令

时间:2014-05-08 09:02:53

标签: bash declare

为什么int"$((++k))"=test被bash视为命令?例如:

$ int1=test
$ int"$((++k))"=test
bash: int1=test: command not found
$ 

我知道我可以使用declare int"$((++k))"=test,但为什么int"$((++k))"=test不起作用?

3 个答案:

答案 0 :(得分:3)

此行为在Shell命令语言的POSIX 2.10.2.7中指定(强调我的):

  

如果'='前面的所有字符形成有效名称(参见IEEE Std 1003.1-2001的基本定义卷,第3.230节,名称),则应返回令牌ASSIGNMENT_WORD。 (引用的字符不能参与形成有效名称。

答案 1 :(得分:1)

您可以使用下面的eval解决变量生成问题:

eval int$((++k))=test

请注意,发送到eval的内容将由shell处理一次。

答案 2 :(得分:-1)

因为bash grammar需要这样做。

<letter> ::= a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|
             A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z

<digit> ::= 0|1|2|3|4|5|6|7|8|9

<number> ::= <digit>
           | <number> <digit>

<word> ::= <letter>
         | <word> <letter>
         | <word> '_'
         | <word> <digit>

<word_list> ::= <word>
             |  <word_list> <word>

<assignment_word> ::= <word> '=' <word>