Как передать строки в операторе for в bash и отправить их в функцию внутри в качестве отдельных аргументов? - PullRequest
1 голос
/ 06 января 2011

Я хочу иметь возможность отправлять разрешения в функцию fnToDisplay () изнутри оператора for.Список в операторе for должен содержать одно разрешение за раз.

Критическая проблема заключается в том, что я не могу изменить fnToDIsplay (), но все же должен иметь возможность фиксировать разрешение как отдельные аргументы в этой функции.Есть ли способ сделать это, просто отформатировав оператор for или переменную assignemnts в main определенным образом?

Приведенный ниже код не выполняет предполагаемую работу, но должен дать представление о том, что я ищу.

#!/bin/bash

fnToDisplay()
{
# $1 should display 1280, 1920 and 640 for each call from for loop
echo $1 
# $2 should display 1024, 1080 and 480 for each call from for loop
echo $2
}

res1="1280 1024"
res2="1920 1080"
res3="640 480"
for resolution in $res1 $res2 $res3
do
 fnToDisplay $resolution
done

exit

Любая помощь приветствуется.Спасибо

Ответы [ 2 ]

5 голосов
/ 06 января 2011

Просто защитите $ res_i двойными кавычками при объявлении цикла for:

res1="1280 1024"
res2="1920 1080"
res3="640 480"
for resolution in "$res1" "$res2" "$res3"
do
    fnToDisplay $resolution
done

Кстати, в bash вы могли бы использовать массив:

resolutions=("1280 1024" "1920 1080" "640 480")
for resolution in "${resolutions[@]}"; do
    fnToDisplay $resolution
done
0 голосов
/ 06 января 2011

Иногда, если вы не можете победить их, присоединяйтесь к ним.Если вы заранее не знаете количество пар разрешений, вы можете использовать здесь документ:

#!/bin/bash

fnToDisplay()
{
# $1 should display 1280, 1920 and 640 for each call from for loop
echo $1 
# $2 should display 1024, 1080 and 480 for each call from for loop
echo $2
}

res1="1280 1024"
res2="1920 1080"
res3="640 480"

cat <<@EOF | while read resline; do fnToDisplay $resline; done
$res1
$res2
$res3
@EOF

exit
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...