2016-06-29 2 views
0

Я хотел бы напечатать 120 списков моделей вместе с сохранением «$».

Мой сценарий:

#!/bin/sh 
for i in {1..10};do 
declare model="$"model$i 
model_list=$(paste $model) 
done 
echo $model_list 

После его выполнения,

paste: $model1: No such file or directory 
paste: $model2: No such file or directory 
paste: $model3: No such file or directory 
paste: $model4: No such file or directory 
paste: $model5: No such file or directory 
paste: $model6: No such file or directory 
paste: $model7: No such file or directory 
paste: $model8: No such file or directory 
paste: $model9: No such file or directory 
paste: $model10: No such file or directory 

Желаемый результат:

$model1 $model2 $model3 $model4 $model5 $model6 $model7 $model8 $model9 $model10 
+0

вы знаете, что делает 'paste' команда Do? Или какая подстановка команд ('$ (...)')? Ли файл './$ model1' содержит только текст' $ model1'? Если нет, то ваш скрипт и понимание команд неисправны. –

ответ

1

, если вы заинтересованы в выходе вместо создавая массив, вы можете использовать ниже код

for i in {1..10};do 
echo -n "\$model$i " 
done 
echo 

или

for i in {1..10};do 
echo -n '$model'$i' ' 
done 
echo 

или

for i in {1..10};do 
model_list=$model_list" \$model$i" 
done 
echo $model_list 
+0

На самом деле model_list был определен в другой команде. Поэтому мне нужно точно так же, как и то, что я спросил. Не могли бы вы предложить сделать это? – Kay

+0

попробуйте третий вариант, который я добавил в свой ответ. дайте мне знать, если это сработает –

1

Вы должны избежать $ через \$ (обратная косая черта знак доллара) ,

Например:

#!/bin/sh 

for i in {1..10}; do 
    declare model="\$"model$i 

    model_list+=$(paste $model) 
done 
echo $model_list 

Вы также можете сократить свой скрипт:

#!/bin/sh 

for i in {1..10}; do 
    model_list+=$(paste "\$model${i}") 
done 

echo $model_list 

Испытано с 5 файлов титулованных $model1 - $model5:

File Contents: 
$model1 - a b c d e f g 
$model2 - 1 2 3 4 5 6 7 8 9 10 
$model3 - I J K L M N O P 
$model4 - 11 12 13 14 15 16 17 18 19 20 
$model5 - q r s t u v w x y z 

Output: 
a b c d e f g1 2 3 4 5 6 7 8 9 10I J K L M N O P11 12 13 14 15 16 17 18 19 20q r s t u v w x y z 
+0

Спасибо за ваш ответ, но я все равно получаю такую ​​же ошибку. – Kay

+0

@ Каян О, вам нужно изменить '=' на '+ =', я обновлю свой ответ. –

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