2014-02-14 4 views
5

Я хочу передать аргументы командной строки, присваиваемые скрипту другой команде, но я также хочу сначала добавить некоторые дополнительные аргументы. Как я могу сделать это с помощью bash?Подготовить аргументы командной строки в linux/bash

Это будет посылать все аргументы по команде:

command [email protected] 

Но я хочу что-то подобное:

command [argument1, argument2, [email protected]] 

Как вы можете сделать что-то подобное в Баш?

ответ

4

Если у вас есть grep foo, и вы хотите добавить -f до foo, вы можете использовать grep -f foo. То же самое относится и к настоящему моменту:

cmd argument1 argument2 "[email protected]" 
+2

@bt, обратите внимание на использование кавычек здесь. Это очень важно: он передает аргументы точно так же, как и полученные. –

+0

Спасибо! Работает отлично! В каких случаях нельзя помещать кавычки вокруг $ @ mess? –

+0

'$ @' ведет себя так же, как '$ *' и подлежит разбиению и глобализации слов. Наиболее распространенным проявлением является то, что вы не можете ничего делать с именами файлов, содержащими пробелы. –

13

@ Ответ ThatOtherGuy правильный.

Если вы хотите «unshift» несколько аргументов в позиционных параметров, выполните следующие действия:

set -- arg1 arg2 "[email protected]" 
cmd "[email protected]" 
0

Если вы хотите более универсальный способ сделать это (рекомендуется), используйте:

#!/usr/bin/env bash 

function xyz { 
    echo "${args[@]}" # arguments will printed out 
} 

function abc { 
    local args=() 
    args+=(argument1) 
    args+=(argument2) 
    args+=("[email protected]") 
    xyz "${args[@]}" 
} 

, чтобы проверить, источник приведенный выше код

source script.sh && abc 
Смежные вопросы