Napisałem następujące wiersze, aby uzyskać ostatni znak ciągu:
str=$1
i=$((${#str}-1))
echo ${str:$i:1}
Działa dla abcd/
:
$ bash last_ch.sh abcd/
/
Nie działa dlaabcd*
:
$ bash last_ch.sh abcd*
array.sh assign.sh date.sh dict.sh full_path.sh last_ch.sh
Zawiera listę plików w bieżącym folderze .
"${1: -1}"
wystarczy.echo "${str:$((${#str}-1)):1}"
. Pozwala to również na zmianę zwracanych znaków końcowych. Ta praca dla mnie w bash v4.1.0 (1)"${1:-1}
Według @perreal, cytowanie zmiennych jest ważne, ale ponieważ przeczytałem ten post 5 razy, zanim w komentarzach znajdę prostsze podejście do pytania ...
Wynik:
/
Wynik:
*
Dziękuję wszystkim, którzy brali w tym udział powyżej; Odpowiednio dodałem +1 w całym wątku!
źródło
${std: -1}
, bez miejsca to nie zadziała. Wpadłem na to i stwierdziłem, że${std:~0}
również działa (ze spacją lub bez). Nie jestem jednak pewien, czy jest to udokumentowane zachowanie, ale nie zawracałem sobie głowy sprawdzaniem tego..sh
skrypcie podczas próby przypisania pobranego znaku do zmiennej. Na przykładdeclare LAST=$(echo "${str: -1}")
spowoduje to nieprzyjemny czerwony pasek pokazujący błąd składni zaczynający się od:${str:0-1}
Wiem, że to bardzo stary wątek, ale nikt nie wspomniał, która dla mnie jest najczystsza:
Zwróć uwagę, że
-n
jest tak, aby echo nie zawierało znaku nowej linii na końcu.źródło
inne rozwiązanie wykorzystujące skrypt awk:
ostatni 1 znak:
ostatnie 5 znaków:
źródło
cat file | awk '{print substr($0,length,1)}'
Dzięki!Pojedyncza linia:
Teraz:
źródło
echo "${str: -1}"
wystarczy (pamiętaj o spacji między:
i-
).$((...))
.Każda dotychczasowa odpowiedź sugeruje, że słowo „powłoka” w pytaniu jest równoznaczne z Bash.
Oto jak można to zrobić w standardowej powłoce Bourne'a:
źródło
echo -n
zgodnie z propozycją user5394399 pozwala uniknąć problemów, gdy$str
zawiera znaki formatu specjalnego.-n
Przełącznik jest składnią Basha. Nie będzie działać w standardowej powłoce Bourne'a jako myślnik, itp ... I był to punkt mojej odpowiedzi.printf "%s" "$str" | ...
:-).Próbować:
Na przykład:
źródło
to dobre podejście
źródło