1

Я пытаюсь написать псевдоним, чтобы сделать 2 вещи

$alias cde='cd "$@" && echo'

но по какой-то причине, когда я звоню с

$cde test
test

все, что происходит, это эхо-тест:

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

1 ответ1

5

Псевдоним не принимает аргументов. Он просто заменяет одну строку другой в вашей командной строке. Для псевдонима нет отдельного $@ поэтому "$@" не расширяется, как вы ожидали. Он расширяется, как если бы вы печатали прямо в командной строке (вручную):

echo "$@"

(Это не показывает точное разделение слов, но это не главное).

Однако функция принимает аргументы и имеет собственный $@ . Мне непонятно, хотите ли вы, чтобы ваше echo печатало псевдоним "аргументы". Если это так, я бы сделал это вместо псевдонима:

cde() { cd "$@" ; echo "$@" ; }

Или скорее:

cde() { cd "$@" ; pwd ; }

Разница заключается в обработке (повторении) нескольких аргументов, расширении путей, например .. и т . Д. Также могут быть полезны опции -L и -P для pwd .

Если вы хотите переопределить cd вам нужна command чтобы избежать бесконечного цикла (в противном случае функция вызывала бы себя):

cd() { command cd "$@" ; pwd ; }

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .