2015-09-09 2 views
0

У меня есть следующий сценарий:не может использовать псевдоним в обратные кавычки внутри Баш скрипт

for i in 1 2 3 
do 
alias echo${i}="echo ${i}" 
alias aliastest${i}="echo aliastest `echo${i}`" 
done 

после его выполнения, я бы ожидать, чтобы иметь 3 псевдонимы в имена aliastest1, aliastest2, aliastest3.

Однако я получаю:

./test.sh: line 5: echo1: command not found 
./test.sh: line 5: echo2: command not found 
./test.sh: line 5: echo3: command not found 

Обратите внимание, что при попытке выполнить echo1, echo2, echo3 из командной строки, он делает работу, как и ожидалось.

Что я делаю неправильно?

+1

Псевдонимы немного странны для начала в 'bash'; вы должны использовать вместо этого функцию оболочки. Каков ваш * фактический * вариант использования? (Это либо просто демоверсия, либо исследование некоторых угловых случаев с псевдонимами. В любом случае, это не стоит вникать, если вы можете использовать функцию оболочки вместо этого.) – chepner

+0

Очевидно, что это просто упрощенная ситуация с реальной проблемой, просто чтобы облегчить отправку здесь. Я принял ваше предложение и переключился на функции. Благодарю. – Yair

ответ

1

Расширение псевдонимов включено только для интерактивных оболочек по умолчанию. Вам нужно будет добавить

shopt -s expand_aliases 

к началу сценария.

Скорее всего, любой псевдоним, который вы хотите определить, скорее всего, вы должны определить как функцию оболочки.

+0

Это правда, но не проблема. Проблема в том, что встроенная команда backtick оценивается в момент назначения псевдонима из-за двойных кавычек. –

+0

Спасибо. Добавлена ​​эта строка, все та же. – Yair

+0

@EtanReisner Hm. Тем не менее, 'echo1' должен быть определен в этой точке; 'echo $ (псевдоним)' будет показывать определение. Есть либо ошибка, либо какая-то тонкость, которую я не замечаю в том, как работает оператор 'alias'. – chepner

Смежные вопросы