joebloggsHerhangi bir ekstra işlem olmadan parametre genişletmeyi kullanarak bu dizeden bash'ta çıkarmak için ...
MYVAR="/var/cpanel/users/joebloggs:DNS9=domain.com"
NAME=${MYVAR%:*} # retain the part before the colon
NAME=${NAME##*/} # retain the part after the last slash
echo $NAME
Yolda joebloggsbelirli bir derinlikte olmaya bağlı değildir .
özet
Referans için birkaç parametre genişletme moduna genel bakış ...
${MYVAR#pattern} # delete shortest match of pattern from the beginning
${MYVAR##pattern} # delete longest match of pattern from the beginning
${MYVAR%pattern} # delete shortest match of pattern from the end
${MYVAR%%pattern} # delete longest match of pattern from the end
Yani #baştan eşleştirme (bir yorum satırı düşünün) ve %sondan itibaren anlamına gelir. Bir örnek en kısa, iki örnek en uzun anlamına gelir.
Sayıları kullanarak konuma göre alt dizeler elde edebilirsiniz:
${MYVAR:3} # Remove the first three chars (leaving 4..end)
${MYVAR::3} # Return the first three characters
${MYVAR:3:5} # The next five characters after removing the first 3 (chars 4-9)
Ayrıca, belirli dizeleri veya desenleri kullanarak da değiştirebilirsiniz:
${MYVAR/search/replace}
patternDosya adı eşleştirme aynı biçimde, yani *(herhangi bir karakter) sıklıkla gibi belirli bir sembol ardından yaygındır /ya.
Örnekler:
Gibi bir değişken verildiğinde
MYVAR="users/joebloggs/domain.com"
Dosya adını bırakan yolu kaldırın (eğik çizgiye kadar tüm karakterler):
echo ${MYVAR##*/}
domain.com
Dosya adını kaldırın, yolu bırakın (sondan sonraki en kısa eşleşmeyi silin /):
echo ${MYVAR%/*}
users/joebloggs
Yalnızca dosya uzantısını alın (son noktadan önceki tümünü kaldırın):
echo ${MYVAR##*.}
com
NOT: İki işlemi yapmak için bunları birleştiremezsiniz, ancak bir ara değişken atamanız gerekir. Yani dosya adını yol veya uzantı olmadan almak için:
NAME=${MYVAR##*/} # remove part before last slash
echo ${NAME%.*} # from the new var remove the part after the last period
domain