2013-09-19 2 views
1

У меня есть моя настройка скрипта, как это, я хочу напечатать имена переключателей, используя цикл.напечатать переменную с помощью другого

swn1="something" 
swn2="somethingelse" 

for ((i=1; i<="$ii"; i++)) 
    do    
     echo "$swn$i " 
    done 

Я искал и искал, но не повезло, может ли кто-нибудь помочь мне, как распечатать сено, используя цикл?

+0

улучшить форматирование кода, пожалуйста – dendini

+0

Хорошо я буду, но вы можете мне помочь, пожалуйста !! – rmaan

ответ

3

Похоже, вы хотите массив ...

swn=("something" "something else") 

for i in "${swn[@]}" 
do 
    echo $i 
done 
0

Вы не можете этого сделать. swn1 - это один токен, swn2 - другой. Похоже, вы хотите массив, и если вы хотите, чтобы массив в сценарии bash либо хотел обработать значения как отдельные строки в файле, либо переключиться на использование Perl.

Отдельные линии:

echo "something" > swnfile; 
echo "somethingelse" >> swnfile; 
cat file | while read line; do 
    echo "$line"; 
done 
+0

Или используйте массивы bash: http://www.tldp.org/LDP/abs/html/arrays.html. –

2

Раствор для этого является переменной косвенности.

swn1="something" 
swn2="somethingelse" 

for ((i=1; i<="$ii"; i++)) 
    do    
     var="swn$i" 
     echo "${!var}" 
    done 

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

Как пояснили в руководстве Баш:

Если первый символ параметра восклицательным знаком, уровень переменной косвенностью вводится (!). Bash использует значение переменную, сформированную из остального параметра как имя переменной ; эта переменная затем расширяется, и это значение используется в остатке замещения , а не в значении самого параметра. Это называется косвенным расширением. Исключением являются расширения $ {! Prefix} и $ {! Name [@]}. Восклицательный знак должен немедленно следовать за левой скобой, чтобы вводил косвенное указание.

+1

Tnx konsolebox, я должен использовать массив в первую очередь я получил это работает, как этот SWN [1] = "что-то" SWN [2] = "somethingelse" II = 2 для ((я = 1; i <= "$ ii"; i ++)) do echo "Switch: $ {swn [$ i]}" done – rmaan

Смежные вопросы