Bash: как избежать $ @? - PullRequest
       27

Bash: как избежать $ @?

7 голосов
/ 31 декабря 2010

Мне нужно написать bash-скрипт, который, помимо прочего, должен передать все свои аргументы без изменений другой программе.

Минимальный пример:

$ cat >proxy.sh 
#!/bin/bash

./script.sh $@
^D

$ chmod +x proxy.sh 

$ cat >script.sh 
#!/bin/bash

echo one $1
echo two $2
echo three $3 
^D

$ chmod +x script.sh 

Этот наивный подход не работаетдля аргументов с пробелами:

$ ./proxy.sh "a b" c
one a
two b
three c

Ожидается:

$ ./proxy.sh "a b" c
one a b
two c
three

Что я должен написать в proxy.sh, чтобы это произошло?

Обратите внимание, что я не могуиспользовать псевдонимы, proxy.sh должен быть сценарием - он делает некоторые вещи перед вызовом script.sh.

1 Ответ

11 голосов
/ 31 декабря 2010

Цитата $@, что делает "$@":

$ cat >proxy.sh 
#!/bin/bash

./script.sh "$@"
^D

Тогда он сохраняет оригинальные цитаты:

one a b
two c
three
...