2013-04-06 1 views
1

У меня есть эта функция:Как передать кусок аргументов команде в zsh?

find() { 
    case "$1" in 
    package) 
     pacman -Ss 
     ;; 
    file) 
     echo "Find file" 
     ;; 
    *) 
     echo "You cannot find something like this." 
    ;; 
    esac 
} 

Моя цель должна быть в состоянии сделать simething как find package foo. Однако похоже, что foo не передан как аргумент pacman. Как я могу это исправить?

ответ

1

Это то, что вам нужно тогда. Попробуйте это:

 
find() { 
    case "$1" in 
    package) 
     shift 
     pacman -Ss [email protected] 
     ;; 
    file) 
     echo "Find file" 
     ;; 
    *) 
     echo "You cannot find something like this." 
    ;; 
    esac 
} 
+1

Вы должны отредактировать свой предыдущий ответ, а не написать новый. Если кто-то должен видеть предыдущую версию, SO хранит историю изменений. – ZyX

0

Попробуйте это:

 
find() { 
    case "$1" in 
    package) 
     pacman -Ss $2 
     ;; 
    file) 
     echo "Find file" 
     ;; 
    *) 
     echo "You cannot find something like this." 
    ;; 
    esac 
} 
+0

Да, но это должно работать только для одного аргумента, в случае, если я хочу сделать что-то вроде 'find package foo bar', только foo будет передан pacman. – UncleLaz

3

Придумал следующее простое решение для варианта количества приведенных аргументов, скажем, вы хотите, чтобы нарезать первые две строки из.

Так, говорят, что вы принимали в какие-то аргументы, и вы знаете, сколько аргументов вы хотите исключить, вы можете нарезать его, как этот

#!/bin/bash 
array=${@: (($#-2)),-1} 
for element in $array; do 
    echo $element 
done 

Примером использования этого, где -2 в (($ # - 2)) - количество аргументов, которые вы хотите исключить с самого начала.

$ ./script.sh some arguments given to the script 
$ given 
$ to 
$ the 
$ script 

О, я использую zsh btw, поэтому - извинения, если что-то там не поддерживается. не думайте так.

 Смежные вопросы

  • Нет связанных вопросов^_^