Programació d'aprenentatge: quina diferència hi ha entre [i [[en Bash?


Resposta 1:

Et deixaré entrar en un parell de secrets. El primer bash és un treball derivat. Les seves característiques bàsiques es van inspirar en la closca de Bourne per Stephen Bourne. La intenció original del "Bourne again shell" (bash) era tornar a implementar un conjunt de característiques compatible i la sintaxi com a programari lliure GNU FSF. A més, la comanda [o test no era una característica integrada en el shell original de Bourne. Un equivalent GNU de l'ordre extern / bin / test i el seu [enllaç continua instal·lat a Linux com a part dels nuclis bàsics GNU

En les versions modernes de bash, l'ordre test i el seu [àlies) estan integrats. MULTIMENT emiten la semàntica del comandament extern. Com qualsevol comandament bash integrat, podeu desactivar-lo i activar-lo segons sigui necessari o, fins i tot, amb caprici.

Aquí és on [[entra. És una ordre de prova integrada millorada (sintaxi). Podeu llegir les pàgines d’home per obtenir més detalls, però són una mica subtils.

Per exemple, sé que [[és compatible amb la concordança regular d'expressions. No recordo quan es va afegir això, potser tan aviat com bash4. No crec que el test integrat ni la versió externa acceptin aquesta comparació (hauríeu d’utilitzar grep en una substitució d’ordres i comprovar el que va passar pel filtre), per exemple.

Portada de claus: moltes funcions i funcions bàsiques en bash només tenen sentit quan es veuen en el context històric de com es va escriure i millorar els elements bash durant molt de temps, el shell original de Bourne va ser escrit fa gairebé cinquanta anys.


Resposta 2:

A la pràctica no hi ha molta diferència entre la codificació [] (claudàtors únics) i [[]] (claudàtors dobles) en les expressions condicionals en bash. (Per descomptat, només es poden utilitzar claudàtors a les referències de matrius.)

L'historial dels shells és que l'antic shell C tenia la configuració d'un sol parèntesi, per tant, els shells desenvolupats posteriorment la suporten per a la seva compatibilitat. (Si realment voleu anar a la vella escola, utilitzeu la prova ... però sí!) La nova configuració de doble claudàtor va permetre introduir algunes millores fàcilment. Una millora de la nota és que ja no cal deixar escapar els operadors de redirecció ().

Tècnicament [i] són un shell integrat mentre que [[i]] són paraules clau. Una conseqüència d’això és que es garanteix que tots els shells siguin compatibles [(compleix POSIX). També les proves suportades per [[poden variar d’un entorn a un altre.

BTW, les preguntes de programació de caràcter tècnic específic són sovint ben resoltes al lloc StackExchange. En aquesta línia, podeu consultar quina diferència hi ha entre els claudàtors dobles i els quadrats simples a bash ?.