Dobrý večer, poraďte prosím jak mám v bash spojit dvě již naplněné pole?
Tohle mám
ARR1=("a" "b" "c")
ARR2=("d" "e" "f")
Tohle chci
ARR3=("a" "b" "c" "d" "e" "f")
Já to napsal blbě, takto to chci (prosím bez loop-u). Díky
Tohle mám
ARR1=("a" "b" "c")
ARR2=("d" "e" "f")
Tohle chci
ARR1=("a" "b" "c" "d" "e" "f")
Citace od: Lenny kdy 02. 11. 2017, 20:12:33
Tohle chci
ARR1=("a" "b" "c" "d" "e" "f")
ARR1=(${ARR1[*]} ${ARR2[*]})
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ší.
Díky, například jak?
Citace od: Lenny kdy 02. 11. 2017, 20:22:58
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.
Koukám, že to mělo být s uvozovkami, takže ještě jednou:
ARR1=("${ARR1[@]}" "${ARR2[@]}")
Fakt je lepší se tomu vyhnout, s některými znaky to nebude fungovat správně.
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.
Citace od: Lenny kdy 02. 11. 2017, 20:22:58
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
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.
ARR1=`cat <<EOF
a
b
c
EOF`
ARR2=`cat <<EOF
d
e
EOF`
ARR3=$(echo "$ARR1"; echo "$ARR2")
Citace od: gll 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.
ARR1=`cat <<EOF
...
A teď to zkus bez proměnných:
cat soubor1 soubor2 soubor3.. a mám spojené 3 soubory do jednoho datového proudu bez použití proměnných.
Citace od: Kit kdy 02. 11. 2017, 22:50:42
Citace od: gll 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.
ARR1=`cat <<EOF
...
A teď to zkus bez proměnných:
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.
Citace od: gll kdy 02. 11. 2017, 22:53:42
Citace od: Kit kdy 02. 11. 2017, 22:50:42
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ě.
Do pole načítám názvy adresářů.
Citace od: Lenny kdy 03. 11. 2017, 01:22:31
Do pole načítám názvy adresářů.
Odkud? Z disku? To by mohla být dobrá úloha pro
find | xargs.
Ano z disku. S každým názvem ale potřebuji pracovat, než jej uložím do pole.
Citace od: Lenny kdy 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.
I to se dá snadno zařídit v příkazu
find.
Tak to asi nee ;)