Fornecendo argumentos de linha de comando para um executável através de um script de shell

2

Suponha que eu tenha um executável xyz que use um número variável de argumentos de linha de comando e um script de shell Korn xyz.ksh . Existe uma maneira fácil de passar todos os argumentos do shell script como está para o executável?

    
por An̲̳̳drew 10.10.2009 / 04:41

3 respostas

12

Você precisa usar:

"$@"

para expansão correta dos parâmetros em todos os casos. Esse comportamento é o mesmo no bash e no ksh.

Na maioria das vezes, $ * ou $ @ darão o que você deseja. No entanto, eles expandem parâmetros com espaços nele. "$ *" fornece todos os parâmetros reduzidos para um. "$ @" fornece o que foi realmente passado para o script wrapper.

Veja por si mesmo (novamente, em bash ou ksh):

[tla ~]$ touch file1 file2 space\ file
[tla ~]$ ( test() { ls $*; }; test file1 file2 space\ file )
ls: cannot access space: No such file or directory
ls: cannot access file: No such file or directory
file1  file2
[tla ~]$ ( test() { ls $@; }; test file1 file2 space\ file )
ls: cannot access space: No such file or directory
ls: cannot access file: No such file or directory
file1  file2
[tla ~]$ ( test() { ls "$*"; }; test file1 file2 space\ file )
ls: cannot access file1 file2 space file: No such file or directory
[tla ~]$ ( test() { ls "$@"; }; test file1 file2 space\ file )
file1  file2  space file
    
por 10.10.2009 / 06:11
1

Acho que você está procurando pela variável $ *: link

É também conhecido como $ @ no bash, eu acho.

    
por 10.10.2009 / 04:48
0

Sim. Use a variável $ *. Experimente este script:

#!/bin/ksh

echo $*

e, em seguida, invoque o script com algo como:

scriptname a b c foobar

Sua saída será:

a b c foobar
    
por 10.10.2009 / 04:48