it-swarm-tr.com

Komut çıktısını Shell değişkeninde saklama

Bir değişkene sonuç atamak istediğiniz cut kullanarak bir işlemim var

var4=echo ztemp.xml |cut -f1 -d '.'

Hatayı alıyorum:

ztemp.xml bir komut değil

Değeri var4 asla atanmaz; Ben çıktısını atamaya çalışıyorum:

echo ztemp.xml | cut -f1 -d '.'

Bunu nasıl yapabilirim?

27
Vass

Ödevinizi okumak için değiştirmek isteyeceksiniz:

var4="$(echo ztemp.xml | cut -f1 -d '.')"

$(…) yapısı komut susbtitution olarak bilinir.

39
Tok

Kullandığınız Kabuğa bağlı olarak, Parametre Genişletme'yi kullanabilirsiniz. Örneğin bash içinde:

   ${parameter%Word}
   ${parameter%%Word}
          Remove matching suffix pattern.  The Word is expanded to produce
          a pattern just as in pathname expansion.  If the pattern matches
          a trailing portion of the expanded value of parameter, then  the
          result  of the expansion is the expanded value of parameter with
          the shortest matching pattern (the ``%'' case)  or  the  longest
          matching  pattern  (the ``%%'' case) deleted.  If parameter is @
          or *, the pattern removal operation is  applied  to  each  posi‐
          tional  parameter  in  turn,  and the expansion is the resultant
          list.  If parameter is an array variable subscripted with  @  or
          *,  the  pattern  removal operation is applied to each member of
          the array in turn, and the expansion is the resultant list.

Sizin durumunuzda bu böyle bir şey yapmak anlamına gelir:

var4=ztemp.xml
var4=${var4%.*}

#, dizenin önek kısmında benzer şekilde davranır.

Ksh, Zsh ve Bash, başka, belki daha net bir sözdizimi sunar:

var4=$(echo ztemp.xml | cut -f1 -d '.')

Bazı fontlarda backticks ("Grave accent") okunamıyor. $(blahblah) sözdizimi en azından çok daha açıktır.

Değerleri bazı kabuklarda read komutuna ekleyebileceğinizi unutmayın:

ls -1 \*.\* | cut -f1 -d'.' | while read VAR4; do echo $VAR4; done
8
Bruce Ediger

Bu, oluşturduğunuz her karmaşık kodu doğru şekilde vurgulayamayan bazı metin editörleriyle kullanımı iyi olan bir değişken atamanın başka bir yoludur.

read -r -d '' str < <(cat somefile.txt)
echo "${#str}"
echo "$str"
3
Aquarius Power