Saya telah menulis baris berikut untuk mendapatkan karakter terakhir dari sebuah string:
str=$1
i=$((${#str}-1))
echo ${str:$i:1}
Ini bekerja untuk abcd/
:
$ bash last_ch.sh abcd/
/
Ini tidak bekerja untukabcd*
:
$ bash last_ch.sh abcd*
array.sh assign.sh date.sh dict.sh full_path.sh last_ch.sh
Ini mencantumkan file di folder saat ini .
"${1: -1}"
sudah cukup.echo "${str:$((${#str}-1)):1}"
. Ini memungkinkan Anda untuk memvariasikan karakter trailing yang dikembalikan juga. Ini bekerja untuk saya di bash v4.1.0 (1)"${1:-1}
Menurut @perreal, mengutip variabel itu penting, tetapi karena saya membaca posting ini seperti 5 kali sebelum menemukan pendekatan yang lebih sederhana untuk pertanyaan yang ada di komentar ...
Keluaran:
/
Keluaran:
*
Terima kasih kepada semua orang yang berpartisipasi dalam hal ini di atas; Saya telah menambahkan +1 dengan tepat di seluruh utas!
sumber
${std: -1}
, tanpa spasi ini tidak akan berfungsi. Saya menemukan ini dan menemukan itu${std:~0}
juga berfungsi (dengan atau tanpa ruang). Tidak yakin apakah ini adalah perilaku yang terdokumentasi, saya tidak repot-repot mencarinya..sh
skrip saat mencoba menetapkan karakter yang diambil ke variabel. Misalnyadeclare LAST=$(echo "${str: -1}")
Ini akan menghasilkan bilah merah jahat yang menunjukkan kesalahan sintaks mulai dari:${str:0-1}
Saya tahu ini adalah utas yang sangat lama, tetapi tidak ada yang menyebutkan yang bagi saya adalah jawaban terbersih:
Perhatikan bahwa
-n
gema tidak menyertakan baris baru di akhir.sumber
solusi lain menggunakan skrip awk:
1 karakter terakhir:
5 karakter terakhir:
sumber
cat file | awk '{print substr($0,length,1)}'
Terima kasih!Garis tunggal:
Sekarang:
sumber
echo "${str: -1}"
cukup (perhatikan jarak antara:
dan-
).$((...))
.Setiap jawaban sejauh ini menyiratkan kata "shell" dalam pertanyaan tersebut sama dengan Bash.
Beginilah cara seseorang dapat melakukannya di shell Bourne standar:
sumber
echo -n
seperti yang dikemukakan oleh user5394399 menghindari masalah ketika$str
berisi karakter format khusus.-n
switch adalah bashism a. Itu tidak akan bekerja dalam standar Bourne shell sebagai tanda hubung, dll ... Yang merupakan inti dari jawaban saya.printf "%s" "$str" | ...
:-).Mencoba:
Misalnya:
sumber
adalah pendekatan yang bagus
sumber