Isso lhe dá a oportunidade de definir / escolher $0
ao usar um script in-line. Caso contrário, $0
seria apenas bash
.
Então você pode fazer por exemplo:
$ bash -c 'wc -c < "${1?}"' getlength foo
4
$ bash -c 'wc -c < "${1?}"' getlength bar
getlength: bar: No such file or directory
$ bash -c 'wc -c < "${1?}"' getlength
getlength: 1: parameter null or not set
Nem todos os shells costumavam fazer isso. O shell Bourne fez. O shell Korn (e Almquist) escolheu o primeiro parâmetro para $1
. POSIX acabou optando pelo Bourne, então ksh
e ash
derivativos voltaram a isso mais tarde (mais sobre isso em link ). Isso significava que por muito tempo para sh
(que dependendo do sistema era baseado no shell Bourne, Almquist ou Korn), você não sabia se o primeiro argumento entrava em $0
ou $1
, então para portabilidade, você tinha que fazer coisas como:
sh -c 'echo foo in "$1"' foo foo
Ou:
sh -c 'shift "$2"; echo txt files are "$@"' tentative-arg0 3 2 *.txt
Felizmente, POSIX especificou o novo comportamento em que o primeiro argumento entra em $0
, então agora podemos fazer portably:
sh -c 'echo txt files are "$@"' meaningful-arg0-for-error *.txt