BASH - Jak spojit dvě pole

Lenny

BASH - Jak spojit dvě pole
« kdy: 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")


Lenny

Re:BASH - Jak spojit dvě pole
« Odpověď #1 kdy: 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")

Re:BASH - Jak spojit dvě pole
« Odpověď #2 kdy: 02. 11. 2017, 20:14:20 »
Kód: [Vybrat]
Tohle chci
ARR1=("a" "b" "c" "d" "e" "f")

Kód: [Vybrat]
ARR1=(${ARR1[*]} ${ARR2[*]})

Kit

Re:BASH - Jak spojit dvě pole
« Odpověď #3 kdy: 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ší.

Lenny

Re:BASH - Jak spojit dvě pole
« Odpověď #4 kdy: 02. 11. 2017, 20:22:58 »
Díky, například jak?


Kit

Re:BASH - Jak spojit dvě pole
« Odpověď #5 kdy: 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.

Kit

Re:BASH - Jak spojit dvě pole
« Odpověď #6 kdy: 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ě.

Lenny

Re:BASH - Jak spojit dvě pole
« Odpověď #7 kdy: 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.

Ondra.

Re:BASH - Jak spojit dvě pole
« Odpověď #8 kdy: 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

gll

Re:BASH - Jak spojit dvě pole
« Odpověď #9 kdy: 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")

Kit

Re:BASH - Jak spojit dvě pole
« Odpověď #10 kdy: 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.

gll

Re:BASH - Jak spojit dvě pole
« Odpověď #11 kdy: 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.

Kit

Re:BASH - Jak spojit dvě pole
« Odpověď #12 kdy: 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ě.

Lenny

Re:BASH - Jak spojit dvě pole
« Odpověď #13 kdy: 03. 11. 2017, 01:22:31 »
Do pole načítám názvy adresářů.

Kit

Re:BASH - Jak spojit dvě pole
« Odpověď #14 kdy: 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.