Saya ingin mengurai variabel (dalam kasus saya ini versi pengembangan kit) untuk membuatnya dot ( .
) gratis. Jika version='2.3.3'
, output yang diinginkan adalah 233
.
Saya mencoba seperti di bawah ini, tetapi .
harus diganti dengan karakter lain yang memberi saya 2_3_3
. Akan baik-baik saja jika tr . ''
berhasil.
1 VERSION='2.3.3'
2 echo "2.3.3" | tr . _
bash
text-processing
prayagupd
sumber
sumber
echo "2.3.3" | tr -d .
.VERSION='2.30.3100'
? Tidak masalah apa saja.
yang dihapus dengan semua jawaban di sini.Jawaban:
Tidak perlu menjalankan program eksternal.
bash
's manipulasi string bisa mengatasinya (juga tersedia dalamksh
(dari mana asalnya) danzsh
):(Dalam manual kerang tersebut, Anda dapat menemukannya di bagian ekspansi parameter.)
sumber
${string//substring/replacement}
, di mana tampaknya tidak adanya garis miring terakhir dan string pengganti ditafsirkan sebagai delete . Lihat di sini .man bash
kata itu dengan jelas di bagian Ekspansi Parameter Parameter : "${parameter/pattern/string}
(...) Jika string adalah nol, kecocokan pola dihapus dan pola/
berikut dapat dihilangkan.""1.0.0"
dan saya hanya menginginkan nomornya jadi ikuti apa yang @manatwork sarankan agar saya ubah:"${VERSIONNUM//'"'}"
namun saya memasukkannya' '
karena jika tidak, ia tidak akan mengenali""
string yang seperti itu untuk lepas landas."
hadir dalam nilai? Saya khawatir ini dianggap sebagai pertanyaan baru, tetapi cobalah untuk menghindari doublequote:"${VERSIONNUM//\"}"
pastebin.com/3ECDtkwH-ash
juga!Dengan urutan kronologis:
tr / sed
csh / tcsh
Kerang POSIX:
ksh / zsh / bash / yash (dan busybox
ash
saat dibuat denganASH_BASH_COMPAT
)zsh
sumber
Selain jawaban yang sukses sudah ada. Hal yang sama dapat dicapai dengan
tr
, dengan--delete
opsi.Yang akan menghasilkan:
233
sumber
--delete
bendera tidak dikenali, tetapi Anda dapat menggunakannya-d
sebagai gantinyaAnda harus mencoba dengan
sed
sebaliknyased 's/\.//g'
sumber
Itu hanya akan mengembalikan digit, tidak peduli karakter apa yang ada
sumber
Perl
Python
Jika
$VERSION
hanya berisi angka dan titik, kita dapat melakukan sesuatu yang lebih pendek:(Waspadalah itu adalah kerentanan kode injeksi meskipun jika
$VERSION
mungkin mengandung karakter apa pun).AWK
Atau ini:
sumber