2016-03-16 2 views
5

Как подать команду в GNU параллельно массиву? Например, у меня есть массив:Поток GNU параллельно массиву?

x=(0.1 0.2 0.5) 

и теперь я хочу, чтобы кормить его в какой-то команды в parallel

parallel echo ::: $x 

Это не работает. Она кормит все аргументы одного вызова, так как он печатает

0.1 0.2 0.5 

вместо

0.1 
0.2 
0.5 

который является выход

parallel echo ::: 0.1 0.2 0.5 

Как я могу сделать это правильно?

ответ

4

Если вы хотите, чтобы обеспечить все элементы в использовании массива:

parallel echo ::: ${x[@]} 
+4

Я думаю, что было бы лучше использовать '' $ {x [@]} "', если любые элементы массива содержат пробелы в будущем, например. 'x = (" 0,1 + 6 "" 0,2 - b "" 0,5 + a ")' –

2

От: http://www.gnu.org/software/parallel/man.html

Пример: Использование переменных оболочки При использовании переменных оболочки необходимо процитировать их правильно, так как они в противном случае могут быть разделены на пробелы.

Обратите внимание на разницу между:

V=("My brother's 12\" records are worth <\$\$\$>"'!' Foo Bar) 
parallel echo ::: ${V[@]} # This is probably not what you want 

и:

V=("My brother's 12\" records are worth <\$\$\$>"'!' Foo Bar) 
parallel echo ::: "${V[@]}" 

При использовании переменных в реальной команде, которая содержит специальные символы (например, пробел) Вы можете цитировать их используя «$ VAR» или используя «'s и -q:

V="Here are two " 
parallel echo "'$V'" ::: spaces 
parallel -q echo "$V" ::: spaces 
Смежные вопросы