Portál AbcLinuxu, 14. ledna 2026 00:55
Řešení dotazu:
sffs/ asdasd/gfdsfsdf/asdsadas/ gdgdfg/asdsadasd/fsddgfd/asdsadasds/fsdfdff/sdfdfsdfg/
$ echo gdgdfg/asdsadasd/fsddgfd/asdsadasds/fsdfdff/sdfdfsdfg/ | rev | cut -d / -f 3- | rev gdgdfg/asdsadasd/fsddgfd/asdsadasds/fsdfdff
Jednoduchý příklad:
shopt -s extglob
cesta='asdasd/gfdsfsdf/asdsadas/'
echo "${cesta%%*([^/])/}"
Podrobněji k tématu:
cesty=(
[0]='sffs/'
[1]='asdasd/gfdsfsdf/asdsadas/'
[2]='gdgdfg/asdsadasd/fsddgfd/'
[2]+='asdsadasds/fsdfdff/sdfdfsdfg/'
)
# Toto je jen pro jistotu; bývá to zapnuté:
shopt -s extglob
# Pouze výpis pozměněných cest:
for cesta in "${cesty[@]}"; do
# První možnost:
echo "'${cesta}' -> '${cesta%%*([^/])/}'"
# Druhá možnost:
echo "'${cesta}' -> '${cesta/%*([^\/])\/}'"
done
# Transformace pole cest do nových polí:
bez_konce_1=("${cesty[@]%%*([^/])/}")
bez_konce_2=("${cesty[@]/%*([^\/])\/}")
# Výpis pro kontrolu:
for index in "${!cesty[@]}"; do
echo "'${cesty[index]}' -> '${bez_konce_1[index]}'"
echo "'${cesty[index]}' -> '${bez_konce_2[index]}'"
done
Nebo pokud je v tom cvičení povolený dirname
tak takhle:
shopt -s extglob
cesta='asdasd/gfdsfsdf/asdsadas/'
echo "$(dirname "${cesta}")/"
dirname se dá taky použít s těmi poli a dalšími triky výše. Ale pozor, dirname nemusí nutně každý považovat za (čistý) Bash, takže záleží na zadání. 
extglob je tam teď samozřejmě na houby — copy&paste chyba.
chapu ze se striktne drzis prikladu kde vypada ze na konci chce mit /, ale vem to z praxe, to pak bude pouzivat ${zjistenej_adresar}${soubor_v_nem}, nebo citelneji ${zjistenej_adresar}/${soubor_v_nem} s tim ze se to interpretuje pak jako // i kdyz to nejspis nicemu nevadi... z praxe je podle me vhodne mit konec promene bez / a lomitko davat v pripade potreby az za tu promenou.
cesta='asdasd/gfdsfsdf/asdsadas/'
dirname "${cesta}"
Ano, s lomítkem je to složité, zejména když přijde na to, jaký speciální význam mu dává třeba rsync.
Tady jsem vycházel z toho, že zadání prostě vyžaduje lomítko.
Ne, dirname.
echo "${string%/*/}"
Plus / na konec…
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.