Biasanya, $0dalam sebuah skrip diatur ke nama skrip, atau untuk apa pun itu dipanggil sebagai (termasuk path). Namun, jika saya gunakan bashdengan -copsi, $0disetel ke argumen pertama yang diberikan setelah string perintah:
bash -c 'echo $0 ' foo bar
# foo
Efeknya, sepertinya parameter posisi telah digeser, tetapi termasuk $0. Namun shiftdalam string perintah tidak mempengaruhi $0(seperti biasa):
bash -c 'echo $0; shift; echo $0 ' foo bar
# foo
# foo
Mengapa perilaku yang tampaknya aneh ini untuk string perintah? Perhatikan bahwa saya mencari alasan, alasannya, di balik penerapan perilaku aneh tersebut.
Orang bisa berspekulasi bahwa string perintah seperti itu tidak akan membutuhkan $0parameter seperti yang biasanya didefinisikan, jadi untuk ekonomi juga digunakan untuk argumen normal. Namun, dalam hal itu perilaku shiftaneh. Kemungkinan lain adalah yang $0digunakan untuk mendefinisikan perilaku program (ala bashdisebut sebagai shatau vimdisebut sebagai vi), tetapi itu tidak bisa, karena di $0sini hanya terlihat dalam string perintah dan bukan oleh program yang dipanggil di dalamnya. Saya tidak bisa memikirkan kegunaan lain untuk apa $0, jadi saya bingung menjelaskan hal ini.
echo 'echo the other side of this pipe globs "$@"' | sh -s -- *, meskipun, sayangnya, $0umumnya bukan parameter yang -sdapat diatur dengan opsi tream ... Ini dapat digunakan dalam banyak cara yang sama pada xargsumumnya. Dan lainnya selain itu.
--, maka itu bisa saja memiliki interpretasi biasa 'dari sini mulai argumen', terlihat di beberapa program lain. Kemudian lagi, itu bisa membingungkan mereka yang tidak terbiasa -cuntuk berpikir --sebenarnya memiliki interpretasi itu.
-untuk$0argumen sebagai idiom, seperti dish -c 'foo $1 $2' - a b. Dengan cara ini terlihat cukup normal (setelah Anda mengetahui apa-artinya itu)