Bash'deki yürütme satırındaki yükleme koşulu


1

Bir değişkenin niteliğine bağlı bir seçenekle bir komut çalıştırmak istiyorum. Değişken ayarlanmışsa, seçeneği değerle yükleyin, ancak değilse, bu seçeneği yüklemeyin. Elimde bu var:

if [ -n "$variable" ]
  then command ... -option $variable
  else command ...
fi

Fikir, bu koşulu içinde tek bir komutla birleştirmek olacaktır, böylece komutun diğer seçeneklerini iki kez tekrarlamak zorunda kalmam.

Zaman ayırdığınız için çok teşekkürler.


Kabul ettiğinizden daha basit bir çözümüm var, lütfen bir göz atın. Şerefe.
MariusMatutiae

Yanıtlar:


1

Bash dizileri kullanma:

opts=()
[ "$variable" ] && opts+=(-option "$variable")
command ... "${opts[@]}"

Bu bash dizileri kullandığından $variable, boşluk veya diğer zor karakterler içeriyorsa bile bu işe yarar .

Nasıl çalışır

  • opts=()

    Bu denilen boş bir dizi oluşturur opts.

  • [ "$variable" ] && opts+=(-option "$variable")

    Eğer $variableboş değil, o zaman ekleme -optionve $variablediziye opts.

  • command ... "${opts[@]}"

    Bu, emrinizi yerine getirir. optsBoş değilse , elemanları komuta eklenir. Eğer optsboş, hiçbir şey eklenir: sanki olurdu "${opts[@]}"hiç yoktu.


Teşekkürler! Bir cazibe gibi çalıştı. Sadece merak için, "@" ne anlama geliyor?
Juan

@Juan Sizin için çalıştığıma sevindim. @İçinde ${opts[@]}her öğeyi genişletmek için bash söyler optsayrı bir kelimeye.
John1024

0

Ardından emrinizi alın ve böyle bir işlev yapın:

function command_function () {
  command ... -option $variable
}

if [ -n "$variable" ]
  then command_function ... -option $variable
  else command_function ...
fi

Sadece Bash işlevindeki parantezlerin hiçbir şeyi geçmediğini biliyorsunuz.


0

Kullanma Bash ikame ( Shell parametre-Genleşme bir özlü, okunabilir sözdizimi için):

$ echo ${variable:+-option $variable}

$ variable=yes
$ echo ${variable:+-option $variable}
-option yes

0

Aşağıdaki bir liner yapacak:

[ x"$VARIABLE" = x ] && echo UNSET || echo SET

Değişken olsun bu testler x "$ DEĞİŞKEN" eşittir x eğer başka bir deyişle, $ DEĞİŞKEN boş; Test ilk seçeneği yerine getirildiği takdirde ( yankı UNSET testi ise), yürütülen değil son seçenek (yürütüldüğünde memnun yankı SET ). İkinci durumda bir şey yapmak istemezseniz, yapabilirsiniz

[ x"$VARIABLE" = x ] && echo UNSET || :

Bu, diğer çözümlerden çok daha basittir, durumun yalnızca bir kez değerlendirilmesine izin verir, VARIABLE'da görünen garip karakterlere karşı dayanıklıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.