Если в типичной интерактивной оболочке вы запускаете:
$ set -- # this clears the argument list; it's empty by default, but make sure.
$ alias foo1="echo $1"
$ alias foo2="echo '$1'"
$ alias -p
Вывод alias -p
выглядит следующим образом:
$ alias -p
alias foo1='echo '
alias foo2='echo '\'''\'''
В частности, $1
sвообще отсутствует - поскольку вы определили псевдоним в строке в двойных кавычках, они были заменены текущим значением $1
- значением, присутствующим в контексте текущей оболочки, которое для интерактивной оболочки будет пустымпри запуске.
Таким образом, когда вы запускаете:
foo2 hello world
..., что вызывает оболочка:
echo '' hello world
Поскольку echo
ставитпробелы между аргументами выводятся как:
hello world
Принимая во внимание, что если вы запустите:
foo1 hello world
... то, что вызывает оболочка:
echo hello world
... потому что, как вы можете видеть из псевдонима foo1
, испускаемого alias -p
, нет записей о не цитируемых $1
слева;оно было заменено его текущим значением - пустой строкой - во время определения.