Назад | Перейти на главную страницу

Предоставление аргументов командной строки для исполняемого файла через сценарий оболочки

Предположим, у меня есть исполняемый файл xyz который принимает переменное количество аргументов командной строки и сценарий оболочки Korn оболочки xyz.ksh. Есть ли простой способ передать все аргументы сценария оболочки как есть в исполняемый файл?

Вам нужно использовать:

"$@"

для правильного расширения параметров во всех случаях. Это поведение одинаково как в bash, так и в ksh.

В большинстве случаев $ * или $ @ дают вам то, что вы хотите. Однако они расширяют параметры пробелами. «$ *» сводит все параметры к одному. «$ @» дает вам то, что фактически было передано в сценарий оболочки.

Убедитесь сами (опять же, в bash или 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

Я думаю, вы ищете переменную $ *: http://www.well.ox.ac.uk/~johnb/comp/unix/ksh.html#commandlineargs

Думаю, в bash он иначе известен как $ @.

Да. Используйте переменную $ *. Попробуйте этот сценарий:

#!/bin/ksh

echo $*

а затем вызовите скрипт примерно так:

scriptname a b c foobar

Ваш вывод будет:

a b c foobar