2013-12-10 63 views
1

我想用一个变量,这个名字(?):topMiddleOligocenetoUpperEocene?问号shell变量

我怎么能做到这一点在shell脚本(即,使用问号)?我试过了:

{topMiddleOligocenetoUpperEocene?}="something" 

但是在我的shell脚本(myfile.sh在第一行#!/ bin/sh中使用)中没有理解它。

任何暗示将提前赞赏,感谢。

回答

4

不能。这在bash中不是一个有效的标识符。见name定义在http://www.gnu.org/software/bash/manual/bashref.html#Definitions

仅由字母,数字字,并强调,并以字母开头或下划线。名称用作shell变量和函数名称。也被称为标识符。

+0

我看到'dash'手册页说“用户设置的变量必须包含一个仅由字母,数字和下划线组成的名称 - 第一个名称不能是数字。 –

3

不,你不能使用UNIX shell变量名?。事实上,许多其他特殊字符,如句点,逗号,?都是不允许的。

这是shell变量名正则表达式:

[a-zA-Z_][a-zA-Z0-9_]* 
+0

感谢你们,让我改个名字,以为可以 – Gery

+0

是外壳是非常刚性的关于命名变量(可能是因为它是用C编写,因此遵循所有的C公约) – anubhava

+1

正确的正则表达式是:'[A-ZA -Z _] [a-zA-Z0-9 _] *'(不需要加号)。在bash源代码中检查general.h(搜索'合法shell标识符')。 – 2015-11-19 01:40:46

0

?不能是变量名称的一部分,例如:%=,对于shell而言更具有特殊意义。在这种情况下,它会尝试查找以变量名和1个字符(任何字符)开头的文件。除非你有一个可以被hte环境执行的东西,否则它会返回一个错误。

ksh: 
{topMiddleOligocenetoUpperEocene?}="something" 
sh: {topMiddleOligocenetoUpperEocene?}=something: not found. 

bash 
{topMiddleOligocenetoUpperEocene?}="something" 
bash: {topMiddleOligocenetoUpperEocene?}=something: command not found