variabel bash LATLNG berisi nilai garis lintang & bujur dalam tanda kurung seperti itu
(53.3096,-6.28396)
Saya ingin menguraikan ini menjadi variabel yang disebut LAT dan LON yang saya coba lakukan melalui sed seperti itu
LAT=$(sed "s/(\(.*\),\(.*\))/\1/g" "$LATLNG")
LON=$(sed "s/(\(.*\),\(.*\))/\2/g" "$LATLNG")
Namun, saya mendapatkan kesalahan berikut:
sed: can't read (53.3096,-6.28396): No such file or directory
bash
variabel.Jawaban:
Ini dapat diselesaikan melalui sintaksis shell murni. Itu memang memerlukan variabel temp karena kurung (kurung):
Sebagai alternatif, Anda dapat melakukannya dalam sekali jalan dengan bermain dengan
IFS
dan menggunakanread
builtin:sumber
#!/bin/bash
Jawaban SiegeX lebih baik untuk kasus khusus ini, tetapi Anda juga harus tahu cara menyampaikan teks arbitrer
sed
.sed
mengharapkan nama file sebagai parameter kedua, ketiga, dll., dan jika tidak menemukan nama file, itu dibaca dari input standarnya. Jadi jika Anda memiliki teks yang ingin Anda proses yang tidak ada dalam file, Anda harus mem-pipe-nyased
. Cara yang paling mudah adalah:Jadi contoh Anda akan menjadi:
Metode Alternatif (lebih baik tetapi lebih jelas)
Jika Anda berpikir ada peluang yang
$LATLNG
bisa dimulai dengan tanda hubung, atau jika Anda ingin menjadi bertele-tele, Anda harus menggunakanprintf
sebagai gantiecho
:Atau "dokumen di sini", tetapi itu bisa sedikit canggung dengan konstruk yang Anda gunakan:
Atau jika Anda menggunakan
bash
dan tidak khawatir tentang portabilitas, Anda dapat menggunakan "string di sini":sumber
Inilah solusi yang akan bekerja di semua shell POSIX:
Inilah solusi lain yang sama-sama portabel yang mem-parsing sintaks khusus yang digunakan.
sumber
sumber
set -- ...
Ada kesempatan yang sangat baik karakter pertama adalah a-
.