Сохранение входного массива ksh в переменную и передача в другой скрипт - PullRequest
2 голосов
/ 26 июля 2010

Мне нужно изменить существующий сценарий ksh, который просматривает аргументы командной строки, используя 'shift', и поэтому очищает $ @, но теперь хочу передать исходные аргументы второму сценарию впоследствии.

В случае mainline я могу сделать это, скопировав $ @ в переменную и передав его во второй скрипт, но я не могу заставить его работать для указанных в командной строке аргументов командной строки.

Если у меня есть скрипт под названием «принтер», как показано ниже:

#!/bin/ksh

INPUT=$@  
echo "Printing args"
until [[ $# -eq 0 ]];do
   echo $1
   shift
done

./printer2 $INPUT

и printer2, как показано ниже:

#!/bin/ksh

echo "Printing second args"
until [[ $# -eq 0 ]];do
   echo $1
   shift
done

Я бы хотел получить вывод

./printer first second "third forth"

будет:

Printing args
first
second
third forth
Printing second args
first
second
third forth

Я пробовал различные комбинации кавычек вокруг переменных (как в присваивании $ INPUT, так и при передаче его в printer2), но не могу понять это. Кто-нибудь может помочь?

1 Ответ

5 голосов
/ 26 июля 2010

Хорошо, я думаю, что нашел решение после огромного количества проб и ошибок.

Назначение $ INPUT следующим образом:

set -A INPUT "$@"

, а затем передача его следующим образом:

./printer2 "${INPUT[@]}"

производит вывод, который я ищу.

Таким образом, весь первый сценарий:

#!/bin/ksh

set -A INPUT "$@"  
echo "Printing args"
until [[ $# -eq 0 ]];do
   echo $1
   shift
done

./printer2 "${INPUT[@]}"

и

./printer first second "third fourth"

выводит:

Printing args
first
second
third fourth
Printing second args
first
second
third fourth

Если кто-то захочет объяснить проблему другими вещами, япопробовал, пожалуйста, сделайте, так как я все еще заинтересован!

...