LinuxForum.Fans
Тема

Передать параметры скрипта в массив

Автор: nwcra 7 сообщений 2200 просмотров
#180817

Изучаю bash программирование, столкнулся с вопросом как передать параметры скрипта в массив
#!/bin/bash
if [ $# == 0 ]
then
echo "введите количество параметров (от 1 до 5)"
read par
for i in $(seq 1 $par)
do
echo ведите значения
echo param$i=
read p
mass[$i]=$p
done
echo ${mass[1]}
else
par=$#
for i in $(seq 1 $par)
do
mass[$i]=$$i # передать в этот массив
done
echo ${mass[1]}
fi

#180838

array=( бакс@ )
Не?

#180878
nwcra написал:
Изучаю bash программирование, столкнулся с вопросом как передать параметры скрипта в массив

вы можете оформлять код как код, а не как быдлокод? :[
в последний раз оформляю за вас (ошибка исправлена) :

text
#!/bin/bash
if [ $# == 0 ]
then
    echo "введите количество параметров (от 1 до 5)"
    read par
    for i in $(seq 1 $par)
    do
        echo ведите значения
        echo param$i=
        read p
        mass[$i]=$p
    done
    echo ${mass[1]}
else
    par=$#
    for i in $(seq 1 $par)
    do
        mass[$i]=$1 # передать в этот массив
        shift
    done
    echo ${mass[1]}
fi
echo ${mass[@]}
#180888

и да, $$ в скрипте - это PID самого скрипта, а не то, что вы подумали.

#180895

в догонку, тогда уж не $$i, а ${$i}, только я-бы не стал такое в продакшен пихать, даже если оно и работает...

Избегаем оверпостинга, есть кнопка "изменить"

#181011

${$i} не работает пробовал так, работает как предложено выше с shift. Спасибо!

#182848

Избегаем оверпостинга, есть кнопка "изменить"

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

nwcra написал:
${$i} не работает пробовал так, работает как предложено выше с shift. Спасибо!

всегда пожалуйста.
на всякий случай, пока комп под рукой. так - не работает:
[console]doc@dt:~$ echo $0
bash
doc@dt:~$ x=0
doc@dt:~$ echo ${$x}
bash: ${$x}: bad substitution
doc@dt:~$ echo ${${x}}
bash: ${${x}}: bad substitution
[/console]
но можно сделать и так:
[console]doc@dt:~$ s="echo \$$x"
doc@dt:~$ echo $s
echo $0
doc@dt:~$ eval $s
bash
[/console]
как обычно:
WARNING!!!
только для профессиональных каскадёров, не пытайтесь повторить!

Войдите или зарегистрируйтесь, чтобы ответить.