Я пытаюсь написать псевдоним, чтобы сделать 2 вещи
$alias cde='cd "$@" && echo'
но по какой-то причине, когда я звоню с
$cde test
test
все, что происходит, это эхо-тест:
Похоже, мой аргумент не передается первому утверждению, а вместо этого используется в конце всего псевдонима. Из моего понимания $@
должен был использовать все аргументы, чтобы он никогда не достигал эха. В любом случае я могу использовать аргумент в первой части, а не во второй?
bash
alias
bash-alias
Sepehr Nazari
источник
источник
echo
без аргументов? Какой смысл это имеет? Зачем&&
? Что именно вы хотите, чтобы произошло?Ответы:
Псевдоним не принимает аргументов. Он просто заменяет одну строку другой в вашей командной строке. Там нет отдельного
$@
для псевдонима так"$@"
не расширяется, как вы ожидали здесь. Он расширяется, как если бы вы печатали прямо в командной строке (вручную):(Это не показывает точное разделение слов, но это не главное).
Однако функция принимает аргументы и имеет свои
$@
, Мне не ясно, хотел ли тыecho
напечатать ваш псевдоним "аргументы". Если это так, я бы сделал это вместо псевдонима:Или скорее:
Разница заключается в обработке (повторении) нескольких аргументов, расширении путей, таких как
..
и т. д. Также-L
а также-P
вариантыpwd
может быть полезнымЕсли вы хотите переопределить
cd
тогда вам нужноcommand
чтобы избежать бесконечного цикла (в противном случае функция вызывала бы себя сама):источник
"$@"
когда псевдоним выполняется на самом деле независимо от ток позиционные параметры есть. Проверьте псевдоним сset -- foo bar; cde baz
- & GT;bash: cd: foo: No such file or directory