为什么int"$((++k))"=test
被bash视为命令?例如:
$ int1=test
$ int"$((++k))"=test
bash: int1=test: command not found
$
我知道我可以使用declare int"$((++k))"=test
,但为什么int"$((++k))"=test
不起作用?
答案 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>