Для сценария Bash я могу использовать "$@"
для доступа к аргументам. Какой эквивалент, когда я использую псевдоним?
64
Псевдонимы подобны командам в том, что все аргументы к ним передаются в качестве аргументов псевдониму программы. Например, если вы были псевдоним , ls
чтобы ls -la
, затем , набрав ls foo bar
будет действительно выполнить ls -la foo bar
в командной строке.
Если вы хотите иметь реальный контроль над тем, как аргументы интерпретируются, то вы можете написать такую функцию:
my_program_wrapper() {
local first_arg="$1" \
second_arg="$2"
shift 2 # get rid of the first two arguments
# ...
/path/to/my_program "$@"
}
sh
определеныmy_program_wrapper() { ...; }
. Bash работает с ключевым словом,function
но почему бы не пойти с тем, что более переносимо?Решение Alias
Если вы действительно против использования функции как таковой, вы можете использовать:
Вы можете заменить
$@
на,$1
если вы хотите только первый аргумент.объяснение
Это создает временную функцию
f
, которой передаются аргументы.Аргументы псевдонимов передаются только в конце. Обратите внимание, что
f
вызывается в самом конце псевдонима.unset -f
Удаляет определение функции в качестве псевдонима выполняется так что не торчать после этого.источник
wrap_args x y z
дает мне: bash: синтаксическая ошибка рядом с неожиданным токеном `('f
псевдоним. После того, как я безошибочноf
все работает нормально. Старое название, коллизия.command type f
:)В дополнение к настоящим ответам важно понять, как работают псевдонимы, что все параметры, которые вы вводите после команды с псевдонимами, будут использоваться буквально в конце. Таким образом, нет никакого способа использовать псевдоним для двух команд (по конвейеру или нет), из которых первая должна интерпретировать параметры. Чтобы прояснить ситуацию, вот пример чего-то, что не будет работать так, как ожидалось:
(пример, вдохновленный этим вопросом ), он всегда будет использовать вывод
ls -l
execute в текущем каталоге и выполнит grep для этого - поэтому, используяlsswp / tmp /
будет эквивалентно
ls -l | grep swp /tmp/
и нетls -l /tmp/ | grep swp
.Для всех целей, где аргументы должны использоваться где-то посередине, нужно использовать
function
вместоalias
.источник
Вам не нужно ничего делать, на самом деле; псевдонимы делают это автоматически. Например:
Вы увидите первую страницу foo.txt и
less
закроете ее в EOF (-e), поиск будет без учета регистра (-i) и т. Д.источник
Я отвечаю за csh:
Да, вы можете использовать параметры в псевдонимах и - в отличие от того, что было сказано выше - вы можете ссылаться на них в любом месте определения псевдонима - не только в конце.
Пример для tar-gz -ing что-то:
, где
!:1
и!:2
параметры, которые вы будете указывать при вызове псевдонима.Пример использования:
Что фактически означает, что вы использовали два параметра, которые вы вставили в произвольные места команды tar, сделав все это псевдонимом
tgz
источник