LINUX.ORG.RU

bash и string<-->string


0

0

хочется в скрипте по одной строке получать другую,
типа
"aaa" => "bbb"
map["aaa"]
и получаю "bbb",
как этого можно достичь? нашел в описание bash только массивы :(

anonymous

Встроенного механизма нет. Я бы сделал хэш-массив так:

function hset()
{
   echo "$1=$2" >>_tmp.tmp
}
function hget()
{
   val=`grep _tmp.tmp "^$1=" | cut -d= -f2 | last`
   return $val;
}

Это, конечно, очень примитивно, но работает, примерно так:

hset($key1, $val1);
val1=hget($key1);

Spectrum
()

>хочется в скрипте по одной строке получать другую

Вот так вот: aaa="bbb"; делаешь $aaa и получаешь "bbb". Если хочется отделить один хеш от другого - hashname_aaa="bbb", тогда появляется "keys" в виде ${!hashname_*}.

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

>Вот так вот: aaa="bbb"; делаешь $aaa и получаешь "bbb".

а если значение скрыто в переменной?
$(eval $aaa) ? или что-нибудь типа того?
а если русские символы строка содержит, баш это переварит?

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

-bash-2.05b$ AAA=цурепка
-bash-2.05b$ echo $AAA
цурепка
-bash-2.05b$ БББ=AAA
-bash: БББ=AAA: command not found
-bash-2.05b$ export LC_ALL=ru_RU.KOI8-R
-bash-2.05b$ БББ=AAA
-bash-2.05b$ echo $БББ
AAA
-bash-2.05b$ echo ${!БББ}
цурепка

Die-Hard ★★★★★
()

ksh - тут есть нормальный хеш и синтаксис почти как у bash

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

2UVV:

>...посмотри на тему ниже:

1. Там вообще не понятно, про что вопрос был задан -- соответственно, отвечали кто про что.

2. Про Баше есть конкретный штатный способ, который я изложил выше.

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