У меня есть переменная, содержащая путь. В частности, мне нужно, чтобы эта переменная считывала путь из второго файла (ввода). Вот почему я использую awk. Переменная выглядит примерно так:
path_dock1=`awk 'NR==33 {print $1}' input`
В дополнение к path_dock1 существуют другие переменные path_dock, которые объявлены таким же образом.
path_dock1=`awk 'NR==33 {print $1}' input`
path_dock2=`awk 'NR==34 {print $1}' input`
path_dock3=`awk 'NR==35 {print $1}' input`
...
Я бы хотел, чтобы такая переменная использовалась в цикле for. В частности, я хочу использовать эту переменную в качестве аргумента команды cd. Для этого я использую переменную цикла for, которая работает от 1 до n, где n - общее количество path_dock. переменные.
for t in $(seq 1 1000)
do
cd $path_dock$t
....
done
Конечно, эта стратегия - всего лишь попытка, и она не работает. Есть ли у вас предложение передать аргумент команде cd, сделанной таким образом?
Заранее спасибо.





Используйте расширение параметра:
for t in $(seq 1 1000)
do
tmp=path_dock${t}
cd ${!tmp}
....
done
@danilo, на SO вы можете отказаться от голосования за полезные ответы людей, чтобы поблагодарить их и выбрать любой из ответов как правильный ответ из всех, ура.
@ RavinderSingh13 Я пытаюсь проголосовать, но ... Как мне это сделать?
@danilo, может быть, ваша репутация на данный момент меньше, теперь вы можете попробовать выбрать любой ответ как правильный, а затем, когда у вас будет достаточно репо на SO, тогда вы откажетесь от голосов, ура.
Используйте массив вместо множества пронумерованных переменных
path_dock=()
for i in {1..100} ; do
path_dock+=($(awk 'NR=='$i' {print $1}' input))
done
...
for i in {1..100} ; do
cd "${path_dock[i]}"
...
done
1) $i бесполезен внутри одинарных кавычек 2) Было бы лучше вызвать awk только один раз с диапазоном, чем называть его n раз 3) set -f
@mickp: исправлено 1)
Собственно, это работает. Спасибо за быстрый ответ и спасибо пользователям этого форума ... честно говоря, он работает очень хорошо, и очень трудно найти квалифицированных людей в такого рода социальных сетях. Еще раз спасибо.