GNU/Linux >> Belajar Linux >  >> Linux

Tambahkan Dan Tambahkan String Ke Setiap Elemen $* Di Shell?

Saya mencari solusi paling sederhana yang membutuhkan $* sebagai input, dan diperluas ke setiap elemen yang diawali dan diakhiri dengan string yang diberikan:

$*=foo bar baz
<solution(x,y)>=xfooy xbary xbazy

Saya dapat melakukan prepending atau appending, tetapi tidak keduanya:

echo ${*/#/x}
# prints xfoo xbar xbaz
echo ${*/%/y}
# prints fooy bary bazy

Saya tidak dapat menggabungkan dua solusi. Dokumentasi mengklaim nilai yang dikembalikan oleh ekspansi dalam parameter=* case adalah daftar, tetapi saya tidak dapat menggunakannya seperti itu. Saya ingin meneruskan larik nilai yang dihasilkan ke perintah lebih lanjut sebagai argumen terpisah, oleh karena itu membangun satu string saja tidak akan berhasil.

Jawaban yang Diterima:

#!/bin/bash
echo $*
FIELDS=("${@/#/x}")
FIELDS=("${FIELDS[@]/%/y}")
echo "${FIELDS[*]}"

Saat dijalankan:

$ t.sh foo bar baz
foo bar baz
xfooy xbary xbazy

Linux
  1. Perbedaan Antara Shell Login dan Shell Non-login?

  2. ${!foo} Dan Zsh?

  3. Tes Shell Untuk Menemukan Pola Dalam String?

  1. Perilaku Tak Terduga Dari Skrip Shell?

  2. Diutamakan Operator Logika Shell &&, ||?

  3. Slash Dan Backslash Di Sed?

  1. Bagaimana cara menambahkan teks ke file?

  2. Bagaimana cara membalik daftar kata dalam string shell?

  3. linux shell wc -c hitung karakter +1