2012-04-18 17 views

cevap

22
initial="$(echo $word | head -c 1)" 

"birincisi" senin sorunun açıklamasında söylemek her zaman head bir olasılıkla bir çözümdür. Burada bir sed etiketi bir sed cevaptır beri

+6

POSIX başlığında '-c' seçeneği bulunmadığını lütfen unutmayın: . – gioele

+3

Bu, ilk harfi döndürür, ancak bu bir aşırı sıkmadır ve çözüm, harici yardımcı programlara (kafaya) bağlıdır. Bu, temiz olan saf kabukta yapılabilir. – automatthias

+10

Bu, yukarıdaki yorumların işaret ettiği nedenlerden dolayı kabul edilen cevap olmamalıdır. Gerçek cevaplar aşağıda - '$ {word: 0: 1}' veya '$ {word :: 1}' dır. – noamtm

170
word="tiger" 
firstletter=${word:0:1} 
+3

Tam olarak ne aradığımı varsa, bu beklendiği gibi çalışmaz. Tek kabuklu, alt kabukları yumurtlamadan. Oyumu al! –

58
word=something 
first=${word::1} 
+1

Bu harika olurdu, ama benim için işe yaramıyor, ne bash 4.3.11 ya da zsh 5.0.5 – yoniLavi

+1

GNU bash v4.3.11 ile, '' '' '' harfi '' olarak ayarlanır. Bunu echo $ s ile görebilirsiniz. Bu sizin için işe yaramazsa ve hata ayıklamaya yardımcı olmak istiyorsanız, lütfen yazdığınız komutları ve çıktılarını kopyalayıp yapıştırın. –

+1

Teşekkürler Adam, kötüyüm, neden daha önce benim için işe yaramadığını anlayamıyorum, ama şimdi denedim, basta birkaç sürümde gayet iyi çalışıyor, GNU bash'a geri dönüyorum, v3.1.0. Yine de zsh çalışmıyor, ancak soru "bash" olarak etiketlendi, bu yüzden alakasız. – yoniLavi

1

: O sevenler için oyun tarafından

echo "$word" | sed -e "{ s/^\(.\).*/\1/ ; q }" 

Çal (I do!):

{

  • s: Rutin bir değişiklik başlatmak
    • /:
    • ^\(.\)
    • ikame edilecek ne belirterek başlatın:
    • .* Grup 1'de ilk karakteri yakalamak: satırın geri kalanı ikamesi olacaktır emin olun
    • /: insert Grup 1
    • : değiştirilmesinden
    • \1 belirterek başlamak: geri kalan
  • q; atılır: eğer varsa çıkın sed bu nedenle diğer hatlar için bu bloğu yinelenmeyecektir.

}

Eh eğlenceli olduğunu! :) Ayrıca grep ve etc'yi de kullanabilirsiniz, ancak bash'daysanız ${x:0:1} magick hala daha iyi bir çözümdür.(Bunu için POSIX değişken genişleme kullanmaya çalışıyor bir saat gibi harcanan ama could not :()

+0

Burada bir POSIX çözümü gönderdim: https://stackoverflow.com/a/44988512/4694621 –

0

bash 4 Kullanılması:

x="test" 
read -N 1 var <<< "${x}" 
echo "${var}"