2013-12-10 3 views
1

Я хочу использовать переменную с этим именем: topMiddleOligocenetoUpperEocene?знак вопроса (?) В переменной оболочки

Как это сделать в сценарии оболочки (то есть, используя знак вопроса)? Я пробовал:

{topMiddleOligocenetoUpperEocene?}="something" 

но не понял, в моем сценарии оболочек (myfile.sh использования в первой строке #/бен/ш!).

Любой намек будет оценен, спасибо заранее.

ответ

4

Невозможно. Это не допустимый идентификатор в bash. Смотрите определение name на http://www.gnu.org/software/bash/manual/bashref.html#Definitions

имя

слово, состоящее только из букв, цифр и знаков подчеркивания и, начиная с буквы или подчеркивания. Имена используются как имена переменных оболочки и функции. Также упоминается как идентификатор.

+0

Я вижу dash' человек страницы 'говорит«Переменные, установленные пользователем, должны иметь имя, состоящее исключительно из alphabetics, числа, и подчеркивает - первый из которых не должно быть числовым.» –

3

Нет, вы не можете использовать ? в именах переменных Unix оболочки. На самом деле многие другие специальные символы, такие как период, запятая, ?, не допускаются.

Это регулярное выражение для имен переменных оболочки:

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

Благодарю вас, ребята, поэтому я изменю имя, подумал, что смогу – Gery

+0

Да, оболочка довольно жесткая относительно именования переменной (вероятно, потому, что она была написана на C, поэтому следила за всеми соглашениями C) – anubhava

+1

Правильное регулярное выражение: '[a-zA -Z _] [a-zA-Z0-9 _] * '(знак плюса не нужен). Проверьте general.h в источнике bash (найдите «идентификатор юридической оболочки»). –

0

? не может быть частью имени переменной, например:% = и много более специального значения для оболочки. В этом случае он попытается найти файл, начинающийся с вашего имени переменной и 1 символа (любой символ). Если у вас нет одного, который может быть запущен средой hte, он вернет ошибку.

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

bash 
{topMiddleOligocenetoUpperEocene?}="something" 
bash: {topMiddleOligocenetoUpperEocene?}=something: command not found 
Смежные вопросы