2015-07-30 4 views
2

У меня есть скрипт, который манипулирует данными, создает аргументы и отправляет их во второй скрипт. Один из аргументов содержит пробел.Как передать аргумент с пространством от скрипта bash к скрипту bash?

script1.sh:

args=() 
args+=("A") 
args+=("1 2") 
args+=("B") 
. script2.sh ${args[@]} 

script2.sh:

for f in "[email protected]" 
do 
    echo f=$f 
done 

Я хотел бы получить "1 2" в качестве единственного аргумента, но получить их по отдельности:

f=A 
f=1 
f=2 
f=B 

I попробовал также преобразовать входные данные в script2 в список in=([email protected]) и итерации по нему usin g for f in ${in[@]}, но получил тот же результат.

Таким образом, проблема может быть в одном из следующих: создание списка аргументов; передача встроенного списка; разбор входных данных; или итерации по входу.

Как передать аргумент с пространством от скрипта bash к сценарию bash? Спасибо.

* Я использую git-bash для Windows.

+0

Комбинация ' "$ {арг [@]}"' с 'для F в "$ @"' сделал трюк. Благодарю. –

+0

Только для записи 'for f; do' - это то же самое, что 'for f в" $ @ "; do'. –

ответ

6

Вам просто нужно добавить кавычки, когда передача массива в качестве аргумента:

args=() 
args+=("A") 
args+=("1 2") 
args+=("B") 
. script2.sh "${args[@]}" 
+0

@ AlikElzin-kilaka: На стороне приема также используйте кавычки: 'in = (" $ @ ")' – choroba

+0

Комбинация '' $ {args [@]} "' с 'for f in" $ @ " 'сделал трюк. Благодарю. –

+0

@ AlikElzin-kilaka Я собирался предложить 'for f in '$ @" ', но в вашем примере это уже было указано, поэтому я был озадачен. – arco444