Apa perbedaan yang Anda buat antara "program kecil" dan "fungsi"?
JdeBP
Anda dapat memasukkan perintah ke dalam program shell yang memungkinkan Anda memprogram shell untuk berfungsi dan mengambil perintah dengan memanfaatkan fungsi yang diprogram dengan shell untuk memerintahkan program lain dari fungsi shell.
txtechhelp
Jawaban:
15
Tergantung.
Perintah dapat jatuh ke dalam beberapa kategori: builtin, alias, fungsi, executable (skrip dan binari di jalur pencarian).
Di baris perintah, ini menempati ruang nama tunggal dan datar yang memungkinkan pengesampingan. Ada banyak cara membedakan jenis program:
$ f (){:;}
$ alias a=cat
$ which f
f (){:}
Kita tahu itu fadalah fungsi.
$ which a
alias a='cat'/usr/bin/cat
Kita tahu itu aalias.
$ which yes
/usr/bin/yes
Kami tahu itu yesadalah sebuah program.
$ builtin echo ; echo $?0
Shell memiliki echobuiltin ...
$ builtin cat ; echo $?
bash: builtin: cat: not a shell builtin
1
... tapi tidak ada untuk cat. Jika ada builtin atau alias tetapi Anda bersikeras memanggil program, awali perintah dengan backslash:
Juga, perintah yang merupakan program dalam satu implementasi * nix mungkin menjadi shell builtin (= fungsi) di yang lain.
jamesqf
1
@ jamesqf, yeah, shell memiliki alat standar bawaan, tetapi perintah builtin tidak sama dengan fungsi. Jalankan missh -c 'type true; f() { echo x; }; type f'
@ilkkachu: Itu tergantung pada definisi Anda tentang "sama dengan". Tentu saja mereka diimplementasikan secara berbeda, tetapi untuk pengguna biasa mengetik perintah, mereka secara fungsional sama.
jamesqf
1
@ jamesqf, bahkan jika pengguna biasa Anda tidak (tahu bagaimana) menggunakan fungsi, mengklaim mereka sama dengan builtin hanya membingungkan.
ilkkachu
4
Definisi a functionadalah mengembalikan nilai tunggal, dan tidak menghasilkan apa pun. Fungsi Shell secara khusus mungkin sangat baik dan dapat memiliki output atau efek samping lainnya, karena nilai pengembalian fungsi sangat terbatas.
A commandadalah instruksi yang diberikan oleh pengguna untuk memberitahu komputer untuk melakukan sesuatu, misalnya, mengeksekusi satu program atau sekelompok program tertaut.
A programadalah urutan instruksi (yaitu perintah) yang diberikan ke komputer dan dapat dimengerti oleh unit pemrosesan pusat (CPU) komputer. petunjuk ini menunjukkan operasi yang harus dilakukan komputer pada sekumpulan data.
Karena itu, functionsadalah bagian logis dari program. Memanggil satu sepenuhnya dalam proses Anda. The commandadalah sebuah program (atau shell built-in) dapat dieksekusi dari shell command. Perintah ini mengimplementasikan fungsi yang melakukan tugas. Yang terjadi adalah sebaliknya.
"suatu fungsi mengembalikan nilai tunggal, dan tidak menghasilkan apa-apa" - well, yeah, dalam arti matematika mungkin. Tetapi dalam bahasa pemrograman imperatif, itu sangat umum untuk "fungsi" berarti hanya subrutin, yang bisa melakukan apa saja. Dan fungsi-fungsi shell secara khusus mungkin memiliki keluaran atau efek samping lain, karena nilai pengembalian fungsi sangat terbatas.
ilkkachu
@ilkkachu. Terima kasih. Saya telah memperbarui jawabannya. Silakan revisi ;-)
3
Saya pikir definisi ini berasal dari konteks bahasa pemrograman, bukan konteks shell. Ya, saya tahu bahasa shell adalah bahasa pemrograman, tetapi gagasannya tentang "fungsi" sangat berbeda dengan definisi matematika atau komputer-sains - di shell, semua perintah (apakah builtin, fungsi, alias, program, atau skrip) bertindak sama, dan hanya jenis implementasi yang berbeda.
Toby Speight
1
... * kebanyakan * sama; builtin dapat mengubah keadaan shell itu sendiri, sedangkan program eksternal tidak dapat memanggil chdir()atau setenv()di shell yang, bagi mereka, proses induk yang berbeda.
Charles Duffy
1
Saya ingin tahu apakah perintah yang kita panggil di shell adalah fungsi atau program?
Iya.
Khususnya, ketika Anda mengetik beberapa teks dan menekan enter, shell harus menentukan apakah itu:
Jawaban:
Tergantung.
Perintah dapat jatuh ke dalam beberapa kategori: builtin, alias, fungsi, executable (skrip dan binari di jalur pencarian).
Di baris perintah, ini menempati ruang nama tunggal dan datar yang memungkinkan pengesampingan. Ada banyak cara membedakan jenis program:
Kita tahu itu
f
adalah fungsi.Kita tahu itu
a
alias.Kami tahu itu
yes
adalah sebuah program.Shell memiliki
echo
builtin ...... tapi tidak ada untuk
cat
. Jika ada builtin atau alias tetapi Anda bersikeras memanggil program, awali perintah dengan backslash:sumber
sh -c 'type true; f() { echo x; }; type f'
type
lebih disukaiwhich
untuk hampir semua tujuan. Lihat unix.stackexchange.com/q/85249/135943Definisi a
function
adalah mengembalikan nilai tunggal, dan tidak menghasilkan apa pun. Fungsi Shell secara khusus mungkin sangat baik dan dapat memiliki output atau efek samping lainnya, karena nilai pengembalian fungsi sangat terbatas.A
command
adalah instruksi yang diberikan oleh pengguna untuk memberitahu komputer untuk melakukan sesuatu, misalnya, mengeksekusi satu program atau sekelompok program tertaut.A
program
adalah urutan instruksi (yaitu perintah) yang diberikan ke komputer dan dapat dimengerti oleh unit pemrosesan pusat (CPU) komputer. petunjuk ini menunjukkan operasi yang harus dilakukan komputer pada sekumpulan data.Karena itu,
functions
adalah bagian logis dari program. Memanggil satu sepenuhnya dalam proses Anda. Thecommand
adalah sebuah program (atau shell built-in) dapat dieksekusi dari shell command. Perintah ini mengimplementasikan fungsi yang melakukan tugas. Yang terjadi adalah sebaliknya.sumber
chdir()
atausetenv()
di shell yang, bagi mereka, proses induk yang berbeda.Iya.
Khususnya, ketika Anda mengetik beberapa teks dan menekan
enter
, shell harus menentukan apakah itu:alias
,sumber