Команда Bash: В чем разница между переменной и псевдонимом? - PullRequest
10 голосов
/ 08 сентября 2011

Я новичок в Linux и начинаю с основ.

- я думал, псевдоним используется для создания ярлыка для команды.Но я попробовал следующее с помощью переменной (в Ubuntu) и все еще работает!

$ foo="mkdir Directory"
$ $foo #this will create a directory named Directory

с использованием псевдонима:

$ alias bar="mkdir Directory"
$ bar #creates a Directory named directory

Это так, как это должно работать?Большое спасибо за ответы:)

Ответы [ 5 ]

16 голосов
/ 08 сентября 2011

Переменные гораздо более универсальны, чем псевдонимы. Переменные могут использоваться в любом месте командной строки (например, как части аргументов программы), в то время как псевдонимы могут только использоваться в качестве имен программ для запуска, т.е. как первое слово в командной строке. Например:

foo="mkdir Directory"
echo $foo  # Prints "mkdir Directory"

alias bar="mkdir Directory"
echo bar  # Nothing gets expanded -- just "bar" is printed

Переменные также можно экспортировать в среду дочерних процессов. Если вы используете export встроенный для экспорта переменных, то программы могут использовать функцию getenv(3) для получения значений переменных.

См. Руководство по Bash для полного описания всех различных типов расширений, которые он может выполнять, и того, как он их выполняет. Смотрите также раздел о псевдонимах .

2 голосов
/ 26 февраля 2015

«Переменные гораздо более универсальны, чем псевдонимы» - не совсем верно!

Для выполнения команд переменные имеют некоторые ограничения, которые не используются псевдонимами.

Попробуйте использовать переменную, чтобы определитькоманда, которая отображает одну звездочку в командной строке:

$ myCommand="echo *"
$ $myCommand
file1.x file2.y file3.z

* Расширена * - это не то, что вы хотели - так что попробуйте это:

$ myCommand="echo \"*\""
$ $myCommand
"*"

Но сейчасу вас появляются дополнительные кавычки - вы тоже этого не хотели!

Но это работает нормально:

$ echo "*"
*

И вот так:

$ alias myCommand="echo \"*\""
$ myCommand
*

Этопотому что кавычки внутри переменной обрабатываются как литеральные, а не синтаксические при раскрытии переменной - так что в этом случае они становятся частью параметра, который передается команде echo - тогда как с псевдонимом команда выполняется "как есть" икавычки обрабатываются как синтаксические и анализируются перед вызовом echo, так же, как и при вводе одной и той же команды непосредственно из командной строки.

1 голос
/ 08 сентября 2011

В переменной форме он расширяется и оценивается.

Следовательно,

$ $foo

расширяется до

$ mkdir Directory

, который можно оценить.Это такой же тип расширения, как если бы foo был аргументом:

$ echo $USER

Для псевдонимов вы ссылаетесь на них напрямую, используя имя (без $), и оно раскрывается только в том случае, если это первое слово.

1 голос
/ 08 сентября 2011

Обратите внимание, что когда вы вводите псевдоним, как если бы это была команда, вы не вводите $; когда вы вводите переменную, вы должны включить ее. Таким образом, псевдонимы более естественно действуют как альтернативное имя для команды.

0 голосов
/ 08 сентября 2011

Переменные заменяют свое содержимое везде, где они используются.

$ foo="mkdir Directory"
$ $foo
$ echo "$foo"

Псевдонимы действуют как фактические команды или, скорее, префикс одной из них.

$ alias bar="mkdir Directory"
$ bar directory2  #creates directories named "directory" and "directory2"
$ echo bar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...