LINUX.ORG.RU

Присваивание переменной, в имени которой содержится переменная, значения, в котором присутствует «/» (bash)


0

1

Добрый день! не могу понять,как довести до рабочего состояния вот такую конструкцию:

#!/bin/bash port_0=1 index=0 num=0 p=/d/f/$((port_$num)) port_$index=$p

/d/f/... - это просто значение переменной,а не имя файла, интерпретатор,видимо,этого не понимает:(



Последнее исправление: Masha (всего исправлений: 1)

Ответ на: комментарий от Masha

Чего не работает?

[kostya@mky ~]$ A=/d/f/e; echo $A
/d/f/e

mky ★★★★★
()
Ответ на: комментарий от Masha

Я пробовала по-разному,что-то все равно не работает:(

Masha
() автор топика

Помимо eval добавлю башизм: declare port_$index=$p

anonymous
()

одного eval маловато, если я правильно понял, что надо

# !/bin/bash 
port_0=1
index=0
num=0
p="/d/f/\$port_$num"  
eval port_$index="$p"
ananas ★★★★★
()
Ответ на: комментарий от ananas

Не уверен, что понял правильно, но судя по всему конструкцию $(( )) ТС использовал как некий аналог eval:

[kostya@hmky ~]$ port_5=25; num=5; echo $(( port_$num ))
25

Ваша же замена $(( port_$num )) на ″$port_$num″ срабатывает не так, как хотел ТС.

[kostya@hmky ~]$ port_5=25; num=5; echo "$port_$num"
5

Хотя, если я правильно понял то, чего хотел ТС, то лучше бы ему заменить и $(( )) на eval...

mky ★★★★★
()
Ответ на: комментарий от mky

не $port_$num, а \$port_$num. бакс заэкранирован, и в eval срабатывает как надо. убирая ненужную арифметику $((..))

ananas ★★★★★
()
Ответ на: комментарий от ananas

Ну это вобще мина, засовывать в значение переменной «$», только чтобы передать его в eval. А если ТС потом будет делать «echo $p»?

Если переменная «p» вводилась только для определения значения port_$index, так обойтись вобще без неё:

port_0=1
index=0
num=0
eval port_$index=/d/f/'$port_'$num 

mky ★★★★★
()
Ответ на: комментарий от ananas

Будет выведено:

/d/f/$port_0

и на ЛОРе появится ещё одна тема от Masha :-)

mky ★★★★★
()

Машунь, не напрягайся ты так: ещё защитников родины тебе растить.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.