Псевдоним не принимает аргументов. Он просто заменяет одну строку другой в вашей командной строке. Там нет отдельного $@
для псевдонима, поэтому "$@"
не расширяется, как вы ожидали здесь. Он расширяется, как если бы вы печатали прямо в командной строке (вручную):
echo "$@"
(Это не показывает точное разделение слов, но это не главное).
Однако функция принимает аргументы и имеет свои $@
. Мне не ясно, хотите ли вы, чтобы вы echo
напечатали псевдоним "аргументы". Если это так, я бы сделал это вместо псевдонима:
cde() { cd "$@" ; echo "$@" ; }
Или скорее:
cde() { cd "$@" ; pwd ; }
Разница заключается в обработке (повторении) нескольких аргументов, расширении путей и ..
т. Д. Также -L
и -P
опции pwd
могут быть полезны.
Если вы хотите переопределить, cd
то вам нужно command
избегать бесконечного цикла (в противном случае функция вызывала бы себя):
cd() { command cd "$@" ; pwd ; }