Jawaban:
Seperti kata orang lain, Anda tidak bisa melakukan itu.
Tetapi jika Anda ingin mengatur kode menjadi satu file sehingga program utama berada di bagian atas file, dan fungsi-fungsi lain didefinisikan di bawah ini, Anda dapat melakukannya dengan memiliki main
fungsi terpisah .
Misalnya
#!/bin/sh
main() {
if [ "$1" = yes ]; then
do_task_this
else
do_task_that
fi
}
do_task_this() {
...
}
do_task_that() {
...
}
main "$@"; exit
Ketika kita memanggil main
di akhir file, semua fungsi sudah ditentukan. Eksplisit lewat "$@"
ke main
diperlukan untuk membuat argumen baris perintah dari script yang terlihat dalam fungsi.
Eksplisit exit
pada baris yang sama dengan panggilan ke main tidak wajib, tetapi dapat digunakan untuk mencegah skrip yang sedang berjalan kacau jika file skrip dimodifikasi. Tanpa itu, shell akan mencoba untuk melanjutkan membaca perintah dari file skrip setelah main
kembali. (lihat Bagaimana membaca seluruh skrip shell sebelum menjalankannya? )
[[ ${BASH_SOURCE[0]} = "$0" ]] && Main "$@"
untuk memanggil fungsi utama sehingga saya dapat sumbernya di skrip lain tanpa Main
dieksekusi. Kemudian saya dapat menggunakan kembali fungsi atau menulis tes untuk memeriksanya.
main "$@"; exit
(dengan exit
pada baris yang sama dengan main
) juga berguna sebagai perlindungan terhadap file yang sedang dimodifikasi saat ditafsirkan.
exit
di baris yang sama seperti main
kita memastikan shell tidak akan membaca apa pun lagi dari file setelah main
kembali.
main; exit
, main; exit $?
atau main <EOF>
, dalam semua kasus, kode keluar main
digunakan sebagai kode keluar dari skrip. Itu exit
hanya untuk mencegah hal-hal menjadi kacau jika seseorang mengedit skrip saat sedang berjalan.
Tidak, fungsinya harus ada di lingkungan shell pada saat memanggilnya.
Google "Shell Style Guide" memiliki untuk memperbaiki ini:
Fungsi yang dipanggil
main
diperlukan untuk skrip yang cukup lama untuk memuat setidaknya satu fungsi lainnya.
Di akhir skrip, setelah semua fungsi, sebagai satu-satunya pernyataan tidak dalam suatu fungsi, Anda akan miliki
main "$@"
Ini akan memanggil main
fungsi dengan parameter apa pun yang diberikan skrip. The main
Fungsi bisa terletak di bagian atas script (panduan gaya mengatakan untuk meletakkannya di bagian bawah, tetapi sekali lagi, ia mengatakan banyak hal).
Ketika shell masuk ke main
panggilan, semua fungsi dalam skrip telah diuraikan dan karena itu dapat dipanggil dari dalam main
fungsi.
Tidak, fungsi harus dideklarasikan sebelum digunakan. Script Shell dibaca baris demi baris dan ditindaki baris demi baris; jadi fungsi tidak ada sampai deklarasi dijalankan.
C
dalamnya nyaman.
. yourfile
).
if
pernyataan kosong di luar fungsi. Fungsi tidak harus didefinisikan ketika Anda menyatakan itu if
fungsi -mengandung, hanya ketika Anda menelepon itu.
Shell tidak memiliki konsep declaring
fungsi. Jadi, Anda tidak dapat memiliki deklarasi maju.
Sebagai konsekuensinya, Anda harus memiliki implementasi fungsi dibaca oleh shell sebelum dapat dipanggil.
autoload f
mendeklarasikan fungsi, tetapi tubuhnya hanya dimuat pada permintaan pertama). Itu tidak berlaku untuk OP bash
sekalipun.