¿Alguien puede explicarme qué hace el shell en los dos ejemplos A) y B) a continuación? Obviamente se comporta de manera diferente, pero no puedo descubrir por qué la salida es diferente.
Ejemplo:
Tengamos un script en nuestro directorio actual nombrado bla.shcon un solo comando:
echo ${0##/*} hello
A)
Comenzó como: ./bla.sh
da:./bla.sh hello
B)
Comenzó como: . bla.sh
da:-bash hello
Como uso esto en una secuencia de comandos, la segunda salida (debido a "-" delante de -bash) mata el comando. Por supuesto, un simple --antes de la ${...}ayuda, pero me encantaría entender qué causa la salida en primer lugar.
Me encanta bash Y vi [m]. Pero yo divago…

sourcees un alias bash para., no al contrario, ysourceno funcionará en otros shells../<cmd>ejecutará el<cmd>programa que reside en el directorio actual en un nuevo proceso (bifurcado). Tiene que ser ejecutable. Y también legible comienza con#!.. <cmd>hará que su shell actual ejecute el script de shell<cmd>que reside en su$PATHdirectorio actual o en el proceso actual del shell. Tiene que ser legible. Es un alias para el comando de shellsource.fuente
. <cmd>buscará el programa$PATHy, si no se encuentra ENTONCES, buscará en el directorio actual.. ./cmd./cmdusa una ruta explícita (./- directorio actual) al ejecutable. Y no es necesario que comience con#!.. cmd- (akasource) - comando bash incorporado. Una diferencia visible de la ejecuciónsourcees que puede establecer / modificar la variable de entorno del shell actual.fuente
sourcees un alias de bash-only para.(que es estándar)