2013-12-10 95 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