Bildiğim kadarıyla, [[
geliştirilmiş bir versiyonu [
, ancak [[
bir anahtar kelime olarak gördüğümde ve [
bir yerleşik olarak gösterildiğinde kafam karıştı .
[root@server ~]# type [
[ is a shell builtin
[root@server ~]# type [[
[[ is a shell keyword
TLDP diyor ki
Bir yerleşik, aynı addaki bir sistem komutunun eş anlamlısı olabilir, ancak Bash bunu dahili olarak yeniden uygular. Örneğin, Bash echo komutu, davranışları neredeyse aynı olsa da, / bin / echo ile aynı değildir.
ve
Bir anahtar kelime ayrılmış bir kelime, belirteç veya operatördür. Anahtar kelimeler kabuk için özel bir anlama sahiptir ve gerçekten de kabuğun sözdiziminin yapı taşlarıdır. Örnek olarak, bir süre için yapın ve! anahtar kelimelerdir. Bir yerleşime benzer şekilde, bir anahtar kelime Bash'e kodlanmıştır, ancak bir yerleşikin aksine, bir anahtar kelime kendi başına bir komut değildir, ancak bir komut yapısının bir alt birimidir. [2]
Her iki yapmamalı [
ve [[
bir anahtar sözcük? Burada özlediğim bir şey var mı? Ayrıca, bu bağlantıyı de o tazeliyor [
ve [[
aynı tür ait olmalıdır.
if "[" $x -eq 3 ]
(Bash denilen komut için göründüğünden beklendiği gibi çalıştığını [
ve bu var), ama if "[[" $x -eq 3 ]]
yok değil kez daha Bash uygun ismin bir komutla arar çünkü (çalışır, ancak hiçbir yoktur [[
komutu).
/usr/bin/echo
, ama bu bir yerleşik olmadığı anlamına gelmez .