как передать параметры псевдониму?

<p>для сценария bash я могу использовать <code>"$@" для доступа к аргументам. какой эквивалент, когда я использую псевдоним?

псевдонимы подобны командам в том, что все аргументы к ним передаются в качестве аргументов псевдониму программы. например, если вы использовали псевдоним ls to 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 "$@" } </code></pre>

<p><strong>решение alias</strong></p><p>если вы действительно против использования функции как таковой, вы можете использовать:</p><pre><code>$ alias wrap_args='f(){ echo before "$@" after; unset -f f; }; f' $ wrap_args x y z before x y z after вы можете заменить $@</code> с <code>$1 если вы хотите только первый аргумент.<strong>объяснение</strong>это создает временную функцию f, которой передаются аргументы.аргументы псевдонимов передаются только в конце. обратите внимание, что f вызывается в самом конце псевдонима.unset -f удаляет определение функции при выполнении псевдонима, чтобы потом не зависать.

в дополнение к настоящим ответам важно понять, как работают псевдонимы, что все параметры, которые вы вводите после команды с псевдонимами, будут использоваться буквально в конце. таким образом, нет никакого способа использовать псевдоним для двух команд (по конвейеру или нет), из которых первая должна интерпретировать параметры. чтобы прояснить ситуацию, вот пример чего-то, что не будет работать так, как ожидалось:alias lsswp="ls -l | grep swp" (пример, вдохновленный <a href="https://unix.stackexchange.com/questions/19926/aliases-interpretation">этот вопрос ) это всегда будет использовать вывод ls -l выполняется в каталоге  current и создайте grep для этого - используйтеlsswp/tmp /будет эквивалентно ls -l | grep swp /tmp/ и <strong> нет </strong> ls -l /tmp/ | grep swp.для всех целей, где аргументы должны использоваться где-то посередине, нужно использовать function вместо alias.

вы не должны ничего делать, на самом деле; псевдонимы делают это автоматически. например:$ alias less="less -eirqm" $ less foo.txt вы увидите первую страницу foo.txt, и less выйдет в eof (-e), поиск будет выполняться без учета регистра (-i) и т.д.

я отвечаю за csh:да, вы можете использовать параметры в псевдонимах и - в отличие от того, что было сказано выше - вы можете ссылаться на них в любом месте определения псевдонима - не только в конце.пример для tar-gz -ing что-то:$ alias tgz "tar cvf - \!:1 | gzip -9 > \!:2.tar.gz" </code></pre><p>, где <code>!:1</code> а также <code>!:2</code> - это параметры, которые вы будете указывать при вызове псевдонима.</p><p>пример использования:</p><pre><code> $ ls clrcf.dat user_comment_2016.06.03_12:51:50.txt user_comment_2016.06.03_12:54:48.txt test-wadm.tec user_comment_2016.06.03_12:52:04.txt user_comment_2016.06.03_12:55:13.txt $ tgz user* out a user\_comment\_2016.06.03\_12:51:50.txt 1k a user\_comment\_2016.06.03\_12:52:04.txt 1k a user\_comment\_2016.06.03\_12:54:48.txt 1k a user\_comment\_2016.06.03\_12:55:13.txt 1k $ ls out* out.tar.gz </code></pre><p>что фактически означает, что вы использовали два параметра, которые вы вставили в произвольные места команды tar, сделав из них псевдоним <code>tgz</code></p>