Portál AbcLinuxu, 14. května 2025 17:34
část 1 === před první tečkou (mimo tečku) část 2 === za první tečkou (mimo tečku) příklad VAR="214.je.cislo" # část 1 = 214 , část 2 = je.cislo VAR="34.je.taky.cislo" # část 1 = 34 , část 2 = je.taky.cisloPoradíte mi někdo? Děkuji
Řešení dotazu:
$ VAR="214.je.cislo" $ CAST1=`echo $VAR | cut -d . -f1` $ CAST2=`echo $VAR | cut -d . -f2-` $ echo $CAST1 214 $ echo $CAST2 je.cislo
A nebo interně rychleji jen:
>VAR="214.je.cislo" >echo ${VAR%%\.*} 214 >echo ${VAR#*\.} je.cislo
[[ $var == *.* ]]
Tenhle trik se občas hodí i pro jiné účely, např. test, zda proměnná začíná nebo končí určitým vzorkem:
if [ "${var#*.}" != "$var" ]; then ... if [ "${var%.*}" != "$var" ]; then ...
Využívá se toho, že expanze s odříznutím začátku nebo konce zachová původní řetězec, pokud se nenajde žádný odpovídající začátek/konec.
Protože (podle mě) nejlepší řešení se substitucemi už tu bylo zmíněné několikrát (#
, %
, ##
, %%
oddělí {nejkratší,nejdelší}' '{prefix,suffix},
(definovaný jako glob nebo extglob)), vybliju sem teď ještě jedno naschvál hnusné (leč ilustrativní a k dobrodružné četbě manuálové stránky vybízející) řešení:
VAR='bla.ble.BLA.BLE' IFS=. read -a TOKENS <<<"$VAR" echo "${TOKENS[0]}" (IFS=.; echo "${TOKENS[*]:1}";)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.