bagaimana cara membagi string setelah dan sebelum spasi dalam skrip shell?

20

Saya memiliki variabel yang ditampilkan pada gema seperti ini

$ echo $var
129 148

Saya harus mengambil hanya 129 sebagai output. Bagaimana saya membagi 129 dan 148?

surbhi
sumber
echo "${var% *}" && echo "${var#* }"...
jasonwryan
kemungkinan duplikat dari Bagaimana $ {0 ## * /} dan $ {0% / *} berfungsi?
jasonwryan

Jawaban:

35

Selain saran jasonwryan , Anda dapat menggunakan cut:

echo $var | cut -d' ' -f1

Di atas cutadalah echooutput dengan pembatas ruang ( -d ' ') dan menampilkan bidang pertama ( -f1)

Joseph R.
sumber
ini tidak bekerja. saya sudah menggunakannya. katanya perintah tidak ditemukan.
surbhi
3
@urbi Apa kata perintah tidak ditemukan? cutadalah utilitas standar. Skrip Anda mungkin memiliki kesalahan di tempat lain. Secara umum, jangan pernah mengatakan "itu tidak berfungsi". Selalu katakan persis kode apa yang Anda jalankan, apa yang terjadi, dan salin dan tempel pesan kesalahan.
Gilles 'SANGAT berhenti menjadi jahat'
Jawaban ini harus diterima, karena itu cara yang paling ringkas dan langsung. Tentu saja itu tidak akan berfungsi dalam kasus yang lebih rumit daripada contoh yang diberikan.
Dan Nguyen
10

Cara yang rapi untuk melakukan ini adalah dengan menggunakan bash array untuk membagi string pada spasi. Anda dapat mendeklarasikan sebuah array hanya dengan menggunakan tanda kurung:

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[@]}'"
gogoud
sumber
ini mengatakan perintah tidak ditemukan
surbhi
Itu tergantung pada Anda menggunakan bash. Jika Anda menggunakan shell yang berbeda, shell itu mungkin tidak berfungsi. echo $SHELLharus menunjukkan: /bin/bashatau serupa.
gogoud
tidak berfungsi zsh; (
TonyH
Ini berfungsi di ZSH zoom="one two three"; declare -a zoomie=( $( echo $zoom | cut -d' ' -f1- ) ); echo ${zoomie[2]};
TonyH