Saya memiliki variabel Bash $word
, yang terkadang berupa kata atau kalimat, misalnya:
word="tiger"
Atau:
word="This is a sentence."
Bagaimana cara membuat variabel Bash baru yang sama dengan huruf pertama yang ditemukan di variabel? Misalnya, di atas akan menjadi:
echo $firstletter
t
Atau:
echo $firstletter
T
-c
opsi di kepala POSIX: < unix.com/man-page/posix/1/head >.${word:0:1}
atau${word::1}
.echo "$word" | fold -w1 | head -n 1
,printf '%.1s' "$X"
atauprintf '%c' "$X"
tetapi ini semua tunduk pada kesalahan karakter tunggal v. Multi byte.head -c n
, ups.echo "fábio" | head -c 2
memberif�
, jadi itu masalah lain dengan ini saya kira.word="tiger" firstletter=${word:0:1}
sumber
word=something first=${word::1}
sumber
first
diatur ke hurufs
. Anda bisa melihatnya denganecho $s
. Jika itu tidak berhasil untuk Anda, dan Anda ingin bantuan debugging, silakan salin dan tempel perintah yang Anda ketikkan dan hasilnya.Cara portabel untuk melakukannya adalah dengan menggunakan perluasan parameter (yang merupakan fitur POSIX) :
$ word='tiger' $ echo "${word%"${word#?}"}" t
sumber
Dengan potongan:
word='tiger' echo "${word}" | cut -c 1
sumber
Karena Anda memiliki
sed
tag, inilahsed
jawabannya:echo "$word" | sed -e "{ s/^\(.\).*/\1/ ; q }"
Mainkan demi permainan untuk mereka yang menikmatinya (saya lakukan!):
{
s
: memulai rutinitas substitusi/
: Mulai tentukan apa yang akan diganti^\(.\)
: tangkap karakter pertama di Grup 1.*
:, pastikan sisa baris akan berada di substitusi/
: mulai menentukan penggantinya\1
: masukkan Grup 1/
: Sisanya dibuang;
q
: Keluarsed
agar tidak mengulangi blok ini untuk baris lain jika ada.}
Itu menyenangkan!
:)
Anda juga dapat menggunakangrep
dan dll tapi jika Anda berada dibash
dalam${x:0:1}
tenung masih solusi yang lebih baik imo. (Saya menghabiskan waktu satu jam mencoba menggunakan ekspansi variabel POSIX untuk melakukan itu tetapi tidak bisa:(
)sumber
Menggunakan bash 4:
x="test" read -N 1 var <<< "${x}" echo "${var}"
sumber