harici aracı kullanmak için bir sebep yok kullanmak yakalamak istiyorsanız bu, küçük harf duyarlı olduğunu unutmayın böyle bunun için sed olarak; bash, içten yapabilir using parameter expansion:
varsa mesela sen sonra is :
kısaltmak istediğiniz karakteri:
$ str=foo_bar:baz
$ echo "${str%%:*}"
foo_bar
Açgözlü olmayan açgözlü yollarla hem de yapabilirsiniz:
$ str=foo_bar:baz:qux
$ echo "${str%:*}"
foo_bar:baz
$ echo "${str%%:*}"
foo_bar
Özellikle bunu sıkı bir döngü içinde çağırıyorsanız, yeni bir sed işleminin başlatılması, işlemin yazılması, çıktısının okunması ve çıkışının beklenmesi (PID'lerini almak için), tüm yapmanız gereken önemli bir yük olabilir. bash w için iç işleme sahip değilsiniz.
Şimdi - Bunu yapmak isteyen çoğu zaman, ne gerçekten isteyebilirsiniz daha iyi read
ile yapılır alanlara bir değişken, bölmektir.
Örneğin
, Diyelim ki /etc/passwd
bir çizgi okuyorsanız varsayalım:
line=root:x:0:0:root:/root:/bin/bash
IFS=: read -r name password_hashed uid gid fullname homedir shell _ <<<"$line"
echo "$name" # will emit "root"
echo "$shell" # will emit "/bin/bash"
bir dosyadan birden fazla satır işlemesini istediğiniz bile, bu çok yalnız bash ile yapılabilir ve harici süreçler:
while read -r; do
echo "${REPLY%%:*}"
done <file
... herhangi ext gerektirmeden, file
her satırından ilk :
için her şeyden yayacaktır başlatılacak ernal araçlar.
açılımları tırnak koymak Lütfen - 'TEXT'' $ içeriyorsa 'eğer öyleyse echo $ TEXT', dize bölme yapacak 'foo \ t \ tbar \ nbaz', basitçe 'foo bar baz' olarak çıkacak, 'echo' $ TEXT ''bu kusuru göstermiyor. (Çevreyle ilgili olmayan çok değişkenli şeylerin devamlılığı da biraz talihsizdir; en iyi uygulama, ortam değişkenleri ve yerleşik değişkenlerle ad alanı çakışmalarını önlemek için bunları küçük harflerle yapmaktır). –
@CharlesDuffy: Alıntılar hakkında haklısınız: onları atlamak, benim şu andan itibaren reform yapmam gereken kötü bir alışkanlıktır. Tüm-büyük harflerle ilgili olarak, daha ilginç bir açıklama ile ilginç bir nokta yaratırsınız. Kapaklarla ilgili tavsiyenin iyi olduğundan şüpheleniyorum. – thb
Soru değil, ilgili. 'Echo' çalmak için 'echo' $ {TEXT # * x} "' –