Parens kullanmak, komutları her zaman istediğiniz gibi olmayan bir alt kabuğa koyar. Alternatif olarak, kıvırcık parantez kullanın:
command && echo "Ok, continuing" || { echo "Check internet connection"; exit 1; }
Buradaki hile, parenslerin aksine, parantez içindeki son komutun takip edilmesi gerektiğidir ;.
Neden noktalı virgül veya satırsonu gerekli?
Kıvrık ayraç bir komut için geçerli bir argüman. Örneğin, burada argüman olarak kıvırcık bir ayraç var echo:
$ echo }
}
Sonuç olarak, kabuk görürse:
{ command1; command2 }
Kabuk, command1 komutunu bağımsız değişken içermiyor ve command2 karakterini içeren bir bağımsız değişkene sahip olarak yorumlar }. Kıvrık ayraç }, yalnızca noktalı virgül veya satırsonu izliyorsa gruplamayı kapatmak olarak yorumlanır. Yukarıdakilerin çalışması için:
{ command1; command2; }
Altkabuklarda arasındaki fark {...}ve(...)
Aşağıdakilerin x10 olarak ayarlandığını, ancak echokomut çalıştırılmadan önce bu ayarın unutulduğunu gözlemleyin :
$ x=0; false || ( echo Hello; x=10 )
Hello
$ echo $x
0
Kıvırcık parantezlerde, aksine, ayarı x=10hatırlanır:
$ x=0; false || { echo Hello; x=10; }
Hello
$ echo $x
10
Fark, bir alt kabuktaki değişken atamaların, alt kabuk tamamlandıktan sonra hayatta kalmamasıdır.
belgeleme
Gönderen man bash:
(liste)
listesi bir alt kabuk ortamında yürütülür (aşağıdaki KOMUT YÜRÜTME ORTAMI'na bakın). Kabuğun ortamını etkileyen değişken atamaları ve yerleşik komutlar, komut tamamlandıktan sonra geçerli olmaz. Dönüş durumu listenin çıkış durumudur.
{ liste; }
liste sadece geçerli kabuk ortamında yürütülür. liste bir satırsonu veya noktalı virgülle sonlandırılmalıdır. Bu, grup komutu olarak bilinir. Dönüş durumu listenin çıkış durumudur. Meta karakterlerden (ve) farklı olarak {ve} ayrılmış kelimeler olduğunu ve ayrılmış bir kelimenin tanınmasına izin verildiği durumlarda gerçekleşmesi gerektiğini unutmayın. Sözcük kesintisine neden olmadıkları için, boşluk veya başka bir kabuk metakarakteriyle listeden ayrılmalıdır.
[Vurgu eklendi]
()ve{}.