jak podzielić ciąg przed i przed spacją w skrypcie powłoki?


Odpowiedzi:


33

Oprócz sugestii Jasonwryana możesz użyć cut:

echo $var | cut -d' ' -f1

Powyżej cutjest echowyjściem z separatorem spacji ( -d ' ') i wyprowadza pierwsze pole ( -f1)


to nie działa. już go użyłem. mówi, że polecenie nie zostało znalezione.
surbhi,

3
@surbhi Co mówi polecenie nie znaleziono polecenia? cutjest standardowym narzędziem. Twój skrypt prawdopodobnie zawiera błąd w innym miejscu. Mówiąc bardziej ogólnie, nigdy nie mów „to nie działa”. Zawsze mów dokładnie, jaki kod uruchomiłeś, dokładnie co się stało, i kopiuj i wklej komunikaty o błędach.
Gilles „SO- przestań być zły”

Ta odpowiedź powinna zostać zaakceptowana, ponieważ jest to najbardziej zwięzły i bezpośredni sposób. Oczywiście nie będzie działać w przypadkach, które są bardziej skomplikowane niż podany przykład.
Dan Nguyen

10

Świetnym sposobem na to jest użycie tablicy bash, aby podzielić ciąg znaków na spacje. Możesz zadeklarować tablicę za pomocą nawiasów:

var="129 148     181"
vars=( $var )
echo "First  word of var: '${vars[0]}'"
echo "Second word of var: '${vars[1]}'"
echo "Third  word of var: '${vars[2]}'"
echo "Number of words in var: '${#vars[@]}'"

to mówi, że polecenie nie zostało znalezione
surbhi,

To zależy od tego, czy używasz bash. Jeśli używasz innej powłoki, może nie działać. echo $SHELLpowinien pokazywać: /bin/bashlub podobny.
gogoud

nie działa zsh; (
TonyH

Działa to w ZSHzoom="one two three"; declare -a zoomie=( $( echo $zoom | cut -d' ' -f1- ) ); echo ${zoomie[2]};
TonyH
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.