Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Lenny 02. 11. 2017, 20:07:34

Název: BASH - Jak spojit dvě pole
Přispěvatel: Lenny 02. 11. 2017, 20:07:34
Dobrý večer, poraďte prosím jak mám v bash spojit dvě již naplněné pole?

Kód: [Vybrat]
Tohle mám
ARR1=("a" "b" "c")
ARR2=("d" "e" "f")

Kód: [Vybrat]
Tohle chci
ARR3=("a" "b" "c" "d" "e" "f")
Název: Re:BASH - Jak spojit dvě pole
Přispěvatel: Lenny 02. 11. 2017, 20:12:33
Já to napsal blbě, takto to chci (prosím bez loop-u). Díky

Kód: [Vybrat]
Tohle mám
ARR1=("a" "b" "c")
ARR2=("d" "e" "f")

Kód: [Vybrat]
Tohle chci
ARR1=("a" "b" "c" "d" "e" "f")
Název: Re:BASH - Jak spojit dvě pole
Přispěvatel: Miroslav Šilhavý 02. 11. 2017, 20:14:20
Kód: [Vybrat]
Tohle chci
ARR1=("a" "b" "c" "d" "e" "f")

Kód: [Vybrat]
ARR1=(${ARR1[*]} ${ARR2[*]})
Název: Re:BASH - Jak spojit dvě pole
Přispěvatel: Kit 02. 11. 2017, 20:20:47
Kód: [Vybrat]
ARR1=(${ARR1[@]} ${ARR2[@]})
Ovšem mnohem lepší bývá, když se práci s poli v Bashi úplně vyhneš. Většinou je to kratší, jednodušší a rychlejší.
Název: Re:BASH - Jak spojit dvě pole
Přispěvatel: Lenny 02. 11. 2017, 20:22:58
Díky, například jak?
Název: Re:BASH - Jak spojit dvě pole
Přispěvatel: Kit 02. 11. 2017, 20:25:30
Díky, například jak?

To záleží na tom odkud taháš data do těch polí. Obvykle stačí sloučit výstupy těch zdrojů do jednoho datového proudu.
Název: Re:BASH - Jak spojit dvě pole
Přispěvatel: Kit 02. 11. 2017, 20:34:14
Koukám, že to mělo být s uvozovkami, takže ještě jednou:
Kód: [Vybrat]
ARR1=("${ARR1[@]}" "${ARR2[@]}")
Fakt je lepší se tomu vyhnout, s některými znaky to nebude fungovat správně.
Název: Re:BASH - Jak spojit dvě pole
Přispěvatel: Lenny 02. 11. 2017, 21:24:46
A můžou ty znaky co budou dělat problémy obsahovat název souboru?
BTW: Nevíš kde najít manuál pro podmínky (s kulatýma závorka) if (( 1 == 2 )) ? Nemůžu to najít.
Název: Re:BASH - Jak spojit dvě pole
Přispěvatel: Ondra. 02. 11. 2017, 21:37:44
Díky, například jak?
Potreba vyuzit toho, ze mezera je oddelovac a bash to automaticky splituje.

A1= "a b c d"

for ITEM in $A1; do
    echo $ITEM
done

Kdyz to nechces splitnout a predat jako celek, je potreba to uzavrit do zavorek.

for ITEM in "$A1"; do
    echo $ITEM
done
Název: Re:BASH - Jak spojit dvě pole
Přispěvatel: gll 02. 11. 2017, 22:21:35
většina utilit funguje nejlépe s řádky. Taková reprezentace může být výhodná, nemusíte se starat o uvozování slov obsahující mezery.

Kód: [Vybrat]
ARR1=`cat <<EOF                                                                                                                                                           
a                                                                                                                                                                         
b                                                                                                                                                                         
c                                                                                                             
EOF`

ARR2=`cat <<EOF                                                                                                                                                           
d                                                                                                                                                                         
e                                                                                                                                                                         
EOF`

ARR3=$(echo "$ARR1"; echo "$ARR2")
Název: Re:BASH - Jak spojit dvě pole
Přispěvatel: Kit 02. 11. 2017, 22:50:42
většina utilit funguje nejlépe s řádky. Taková reprezentace může být výhodná, nemusíte se starat o uvozování slov obsahující mezery.

Kód: [Vybrat]
ARR1=`cat <<EOF                                                                                                                                                           
...

A teď to zkus bez proměnných:
Kód: [Vybrat]
cat soubor1 soubor2 soubor3
.. a mám spojené 3 soubory do jednoho datového proudu bez použití proměnných.
Název: Re:BASH - Jak spojit dvě pole
Přispěvatel: gll 02. 11. 2017, 22:53:42
většina utilit funguje nejlépe s řádky. Taková reprezentace může být výhodná, nemusíte se starat o uvozování slov obsahující mezery.

Kód: [Vybrat]
ARR1=`cat <<EOF                                                                                                                                                           
...

A teď to zkus bez proměnných:
Kód: [Vybrat]
cat soubor1 soubor2 soubor3
.. a mám spojené 3 soubory do jednoho datového proudu bez použití proměnných.

Předpokládám, že ty pole inicializuje uvnitř skriptu a nechce vytvářet soubory navíc.
Název: Re:BASH - Jak spojit dvě pole
Přispěvatel: Kit 02. 11. 2017, 23:07:19
Kód: [Vybrat]
cat soubor1 soubor2 soubor3
.. a mám spojené 3 soubory do jednoho datového proudu bez použití proměnných.

Předpokládám, že ty pole inicializuje uvnitř skriptu a nechce vytvářet soubory navíc.

A já zase předpokládám, že do těch polí si nejprve narve data ze souborů, hezky řádek po řádku.

Naše předpoklady se různí, proto jsem se tazatele ptal, odkud tahá data do těch polí. Když někde vidím v Bashi pole, tak je zpravidla použito zcela zbytečně.
Název: Re:BASH - Jak spojit dvě pole
Přispěvatel: Lenny 03. 11. 2017, 01:22:31
Do pole načítám názvy adresářů.
Název: Re:BASH - Jak spojit dvě pole
Přispěvatel: Kit 03. 11. 2017, 09:08:19
Do pole načítám názvy adresářů.

Odkud? Z disku? To by mohla být dobrá úloha pro find | xargs.
Název: Re:BASH - Jak spojit dvě pole
Přispěvatel: Lenny 03. 11. 2017, 10:41:19
Ano z disku. S každým názvem ale potřebuji pracovat, než jej uložím do pole.
Název: Re:BASH - Jak spojit dvě pole
Přispěvatel: Kit 03. 11. 2017, 11:06:41
Ano z disku. S každým názvem ale potřebuji pracovat, než jej uložím do pole.

I to se dá snadno zařídit v příkazu find.
Název: Re:BASH - Jak spojit dvě pole
Přispěvatel: Lenny 08. 11. 2017, 19:06:14
Tak to asi nee  ;)