Π ΠΈΡ. 2.1. ΠΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, patfile ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ ΡΠ°ΠΉΠ»ΠΎΠΌ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΏΠΎΠΈΡΠΊΠ°, Π° ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ fgrep Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΡΠΏΠΈΡΠΊΠ° ΡΡΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΊΠ°ΡΡ.
2.1.1. Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ POSIX
Π‘ΡΠ°Π½Π΄Π°ΡΡ POSIX ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ ΡΡΠ΄ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΡΡ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΡΡΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΈΠΊΡΠΎ ΠΎΡ Π²Π°Ρ Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ, ΡΡΠΎΠ±Ρ Π²Π°ΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ»ΠΈ ΡΡΠΈΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ°ΠΌ, Π½ΠΎ ΡΡΠΎ Ρ ΠΎΡΠΎΡΠ°Ρ ΠΌΡΡΠ»Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠ°ΠΊ: ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Linux ΠΈ Unix ΠΏΠΎ Π²ΡΠ΅ΠΌΡ ΠΌΠΈΡΡ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΡΠΈ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ, ΠΈ Π΅ΡΠ»ΠΈ Π²Ρ Π½Π΅ Π±ΡΠ΄Π΅ΡΠ΅ ΠΈΠΌ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΡ, Π²Π°ΡΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π±ΡΠ΄ΡΡ Π½Π΅ΡΡΠ°ΡΡΠ½Ρ. (ΠΠ»ΠΈ Ρ Π²Π°Ρ Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ!) ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΡ ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΠΌ Π΄Π°Π»Π΅Π΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡ Π²Π°Ρ ΠΎΡ Π±ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΡΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΈΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΡ Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅. ΠΠΎΡ ΡΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΠΏΠ΅ΡΠ΅ΡΡΠ°Π·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΡΠ°Π½Π΄Π°ΡΡΠ°:
1. Π ΠΈΠΌΠ΅Π½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ Π΄Π²ΡΡ ΠΈ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ Π΄Π΅Π²ΡΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ².
2. ΠΠΌΠ΅Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π»ΠΈΡΡ ΡΡΡΠΎΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΈ ΡΠΈΡΡΡ.
3. ΠΠΌΡ ΠΎΠΏΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΡΠΎΡΡΡΠΌ Π±ΡΠΊΠ²Π΅Π½Π½ΠΎ-ΡΠΈΡΡΠΎΠ²ΡΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ. ΠΠΏΡΠΈΠΈ Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ ΡΠΈΡΡ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΡΡ. ΠΠ»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ ΡΡΠΈΠ»ΠΈΡΡ POSIX, ΠΎΠΏΡΠΈΡ -W Π·Π°ΡΠ΅Π·Π΅ΡΠ²ΠΈΡΠΎΠ²Π°Π½Π° Π΄Π»Ρ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΡΡ Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ ΠΎΠΏΡΠΈΠΉ.
4. ΠΡΠ΅ ΠΎΠΏΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π° '-'.
5. ΠΠ»Ρ ΠΎΠΏΡΠΈΠΉ, Π½Π΅ ΡΡΠ΅Π±ΡΡΡΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΎΠΏΡΠΈΠΉ ΠΏΠΎΡΠ»Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Π° '-'. (ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, 'foo -a -b -c' ΠΈ 'foo -abc' Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΠΎΠ²Π°ΡΡΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ.)
6. ΠΠΎΠ³Π΄Π° ΠΎΠΏΡΠΈΠΈ Π²ΡΠ΅ ΠΆΠ΅ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΠΎΡΠ΄Π΅Π»Π΅Π½ ΠΎΡ ΠΎΠΏΡΠΈΠΈ ΠΏΡΠΎΠ±Π΅Π»ΠΎΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 'fgrep -f patfile').
ΠΠ΄Π½Π°ΠΊΠΎ, ΡΡΠ°Π½Π΄Π°ΡΡ Π΄ΠΎΠΏΡΡΠΊΠ°Π΅Ρ ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΡΡ ΠΏΡΠ°ΠΊΡΠΈΠΊΡ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠΏΡΠΈΡ ΠΈ Π΅Π΅ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ ΠΌΠΎΠ³ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅: 'fgrep -fpatfile'. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ getopt() ΠΈ getopt_long() ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠΈΡΡΡΡ '-fpatfile' ΠΊΠ°ΠΊ '-f patfile', Π° Π½Π΅ ΠΊΠ°ΠΊ '-f -p -a -t ...'.
7. ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΎΠΏΡΠΈΠΉ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ.
ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΊΠ°Π·Π°Π½ΠΎ, ΡΡΠΎ ΠΎΠΏΡΠΈΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΡΡΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡΠΈΡΡΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π²ΡΠ΅Π³Π΄Π°, ΠΈΠ½Π°ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΠΎΡΠ΅ΡΠΏΠΈΡ Π½Π΅ΡΠ΄Π°ΡΡ GNU getopt() Π²ΡΠ΅ ΠΆΠ΅ ΠΏΡΠ΅Π΄ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅Ρ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΎΠΏΡΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΏΠΎΠ»Π΅Π·Π½Ρ
8. ΠΡΠ»ΠΈ ΠΎΠΏΡΠΈΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΡΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π² Π²ΠΈΠ΄Π΅ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΡΠ°Π·Π΄Π΅Π»Π΅Π½Π½ΡΠΌΠΈ Π·Π°ΠΏΡΡΡΠΌΠΈ ΠΈΠ»ΠΈ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π³ΠΈΠΏΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ myprog ΡΡΠ΅Π±ΡΠ΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π΄Π»Ρ ΠΎΠΏΡΠΈΠΈ -u. ΠΠ°Π»Π΅Π΅ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π²ΡΠ·Π²Π°Π½Π° ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π΄Π²ΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠ²:
myprog -u "arnold,joe,jane" /* Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π°ΠΏΡΡΡΠΌΠΈ */
myprog -u "arnold joe jane" /* Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ */
Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΎΡΠ΄Π΅Π»ΠΈΡΡ ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΊΠ°ΠΆΠ΄ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (Ρ.Π΅. Π·Π΄Π΅ΡΡ Π½Π΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΠΏΡΠΎΡΠ΅Π΄ΡΡΡ), Π½ΠΎ ΡΡΡΠ½Π°Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΡΠΎΡΡΠ°.
9. ΠΠΏΡΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡΡ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ ΠΏΠ΅ΡΠ²ΡΠΌΠΈ, ΠΏΠ΅ΡΠ΅Π΄ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°ΠΌΠΈ. ΠΠ΅ΡΡΠΈΠΈ getopt() Unix ΠΏΡΠΎΠ²ΠΎΠ΄ΡΡ Π² ΠΆΠΈΠ·Π½Ρ ΡΡΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠ΅. GNU getopt() ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ, Ρ ΠΎΡΡ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΡΡΠΎΠΈΡΡ Π΅Π³ΠΎ Π½Π° ΡΡΠΎ.
10. Π‘ΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ '--' ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Π½Π° ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΠΎΠΏΡΠΈΠΉ. ΠΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ ΠΊΠ°ΠΊ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΡΠ΅ΡΡΠΎΡΠΊΠΈ.
11. ΠΠΎΡΡΠ΄ΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ ΠΎΠΏΡΠΈΠΈ, Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ³ΡΠ°ΡΡ ΡΠΎΠ»ΠΈ. ΠΠ΄Π½Π°ΠΊΠΎ, Π΄Π»Ρ Π²Π·Π°ΠΈΠΌΠ½ΠΎ ΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΡ ΠΎΠΏΡΠΈΠΉ, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½Π° ΠΎΠΏΡΠΈΡ ΠΏΠ΅ΡΠ΅ΠΊΡΡΠ²Π°Π΅Ρ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π΄ΡΡΠ³ΠΎΠΉ, ΡΠΎΠ³Π΄Π° (ΡΠ°ΠΊ ΡΠΊΠ°Π·Π°ΡΡ) ΠΏΠΎΡΠ»Π΅Π΄Π½ΡΡ ΠΏΠΎΠ±Π΅ΠΆΠ΄Π°Π΅Ρ. ΠΡΠ»ΠΈ ΠΎΠΏΡΠΈΡ, ΠΈΠΌΠ΅ΡΡΠ°Ρ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ, ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΡΡΡ, ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΏΠΎ ΠΏΠΎΡΡΠ΄ΠΊΡ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, 'myprog -u arnold -u jane' ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΡΠΎ ΠΈ 'myprog -u "arnold, jane"'. (ΠΠ°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈΡΡ ΡΡΠΎ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ; getopt() Π²Π°ΠΌ Π½Π΅ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ.)
12. ΠΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΡΠ΄ΠΎΠΊ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈΠΌΠ΅Π΅Ρ Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. ΠΠ°ΠΆΠ΄Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΊΠΈΠ΅ Π²Π΅ΡΠΈ.
13. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΡΠΈΡΠ°ΡΡΠΈΠ΅ ΠΈΠ»ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΠΈΠ΅ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ, Π΄ΠΎΠ»ΠΆΠ½Ρ ΡΡΠ°ΠΊΡΠΎΠ²Π°ΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ '-' ΠΊΠ°ΠΊ ΠΎΠ·Π½Π°ΡΠ°ΡΡΠΈΠΉ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²Π²ΠΎΠ΄ ΠΈΠ»ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄, Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅.
ΠΡΠΌΠ΅ΡΠΈΠΌ, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅ ΡΠ»Π΅Π΄ΡΡΡ Π²ΡΠ΅ΠΌ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡΠΌ. ΠΠ»Π°Π²Π½ΠΎΠΉ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ; ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΈΡ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ.
2.1.2. ΠΠ»ΠΈΠ½Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ GNU
ΠΠ°ΠΊ ΠΌΡ Π²ΠΈΠ΄Π΅Π»ΠΈ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 1.4.2 Β«ΠΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΒ», ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌ GNU ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»ΠΈΠ½Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ Π² ΡΠΎΡΠΌΠ΅ --help, --verbose ΠΈ Ρ.Π΄. Π’Π°ΠΊΠΈΠ΅ ΠΎΠΏΡΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ΠΈ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ '--', Π½Π΅ ΠΊΠΎΠ½ΡΠ»ΠΈΠΊΡΡΡΡ Ρ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ POSIX. ΠΡ ΡΠ°ΠΊΠΆΠ΅ Π»Π΅Π³ΡΠ΅ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΠΈ ΠΎΠ½ΠΈ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΡΡΠ΅Π΄ΠΈ Π²ΡΠ΅Ρ ΡΡΠΈΠ»ΠΈΡ GNU. (ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, --help ΡΠ²Π»ΡΠ΅ΡΡΡ Π²Π΅Π·Π΄Π΅ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ -h Π΄Π»Ρ Β«helpΒ», -i Π΄Π»Ρ Β«informationΒ» ΠΈ Ρ.Π΄.) ΠΠ»ΠΈΠ½Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ GNU ΠΈΠΌΠ΅ΡΡ ΡΠ²ΠΎΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ, ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠ΅ Π² ΡΡΠ½ΠΊΡΠΈΠΈ getopt_long():
1. Π£ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΡΠ΅Π°Π»ΠΈΠ·ΡΡΡΠΈΡ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ POSIX, ΠΊΠ°ΠΆΠ΄Π°Ρ ΠΊΠΎΡΠΎΡΠΊΠ°Ρ ΠΎΠΏΡΠΈΡ (ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΌΠ²ΠΎΠ») Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅ΡΡ ΡΠ°ΠΊΠΆΠ΅ ΡΠ²ΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π² Π²ΠΈΠ΄Π΅ Π΄Π»ΠΈΠ½Π½ΠΎΠΉ ΠΎΠΏΡΠΈΠΈ.
2. ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π΄Π»Ρ GNU ΠΎΠΏΡΠΈΠΈ Π½Π΅ Π½ΡΠΆΠ΄Π°ΡΡΡΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅ΠΉ ΠΊΠΎΡΠΎΡΠΊΠΎΠΉ ΠΎΠΏΡΠΈΠΈ, Π½ΠΎ ΠΌΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΠΌ ΡΡΠΎ ΡΠ΄Π΅Π»Π°ΡΡ.
3. ΠΠ»ΠΈΠ½Π½ΡΡ ΠΎΠΏΡΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠΊΡΠ°ΡΠΈΡΡ Π΄ΠΎ ΠΊΡΠ°ΡΡΠ°ΠΉΡΠ΅ΠΉ ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΡΠ°Π΅ΡΡΡ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ Π΅ΡΡΡ Π΄Π²Π΅ ΠΎΠΏΡΠΈΠΈ --verbose ΠΈ --verbatim, ΡΠ°ΠΌΡΠΌΠΈ ΠΊΠΎΡΠΎΡΠΊΠΈΠΌΠΈ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡΠΌΠΈ Π±ΡΠ΄ΡΡ --verbo ΠΈ --verba.
4. ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΎΠΏΡΠΈΠΈ ΠΎΡΠ΄Π΅Π»ΡΡΡΡΡ ΠΎΡ Π΄Π»ΠΈΠ½Π½ΡΡ ΠΎΠΏΡΠΈΠΉ Π»ΠΈΠ±ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ, Π»ΠΈΠ±ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ =. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, --sourcefile=/some/file ΠΈΠ»ΠΈ --sourcefile /some/file.
5. ΠΠΏΡΠΈΠΈ ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π½Ρ Π² ΠΎΠΏΠ΅ΡΠ°Π½Π΄Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, getopt_long() ΠΏΠ΅ΡΠ΅ΡΡΠ°Π²Π»ΡΠ΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎ ΡΠ½Π°ΡΠ°Π»Π° ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Π²ΡΠ΅ ΠΎΠΏΡΠΈΠΈ, Π° Π·Π°ΡΠ΅ΠΌ Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°Π½Π΄Ρ Π΄ΠΎΡΡΡΠΏΠ½Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ. (Π’Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΠ΅ΡΠΈΡΡ.)
6. ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ ΠΎΠΏΡΠΈΠΉ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ. ΠΠ»Ρ ΡΠ°ΠΊΠΈΡ ΠΎΠΏΡΠΈΠΉ ΡΡΠΈΡΠ°Π΅ΡΡΡ, ΡΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ, Π΅ΡΠ»ΠΈ ΠΎΠ½ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ Ρ ΠΎΠΏΡΠΈΠ΅ΠΉ. ΠΡΠΎ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π»ΠΈΡΡ Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΊΠΈΡ ΠΎΠΏΡΠΈΠΉ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ -Ρ ΡΠ°ΠΊΠ°Ρ ΠΎΠΏΡΠΈΡ ΠΈ Π΄Π°Π½Π° ΡΡΡΠΎΠΊΠ° 'foo -Ρ YANKEES -y', Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ -Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ 'YANKEES'. ΠΠ»Ρ 'foo -Ρ -y' Ρ -Ρ Π½Π΅Ρ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ².
7. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠ³ΡΡ ΡΠ°Π·ΡΠ΅ΡΠΈΡΡ Π΄Π»ΠΈΠ½Π½ΡΠΌ ΠΎΠΏΡΠΈΡΠΌ Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ ΠΎΠ΄Π½ΠΎΠΉ ΡΠ΅ΡΡΠΎΡΠΊΠΈ (ΠΡΠΎ ΡΠΈΠΏΠΈΡΠ½ΠΎ Π΄Π»Ρ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ X Window.)
ΠΠ½ΠΎΠ³ΠΎΠ΅ ΠΈΠ· ΡΡΠΎΠ³ΠΎ ΡΡΠ°Π½Π΅Ρ ΡΡΠ½Π΅Π΅, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΠ·ΠΆΠ΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ getopt_long().
GNU Coding Standards ΡΠ΄Π΅Π»ΡΠ΅Ρ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²ΡΠ΅Ρ Π΄Π»ΠΈΠ½Π½ΡΡ ΠΈ ΠΊΠΎΡΠΎΡΠΊΠΈΡ ΠΎΠΏΡΠΈΠΉ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°ΠΌΠΈ GNU. ΠΡΠ»ΠΈ Π²Ρ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»ΠΈΠ½Π½ΡΠ΅ ΠΎΠΏΡΠΈΠΈ, ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅, Π½Π΅Ρ Π»ΠΈ ΡΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΡ ΠΈΠΌΠ΅Π½ ΠΎΠΏΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠΌΠ΅Π»ΠΎ Π±Ρ ΡΠΌΡΡΠ» ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ Π²Π°ΠΌ.
2.2. ΠΠ°Π·ΠΎΠ²Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° Π½Π° Π‘ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ²ΠΎΠΈΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ argc ΠΈ argv. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ argc ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅Π»ΡΠΌ, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΌ ΡΠΈΡΠ»ΠΎ ΠΈΠΌΠ΅ΡΡΠΈΡ ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², Π²ΠΊΠ»ΡΡΠ°Ρ ΠΈΠΌΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ. ΠΡΡΡ Π΄Π²Π° ΠΎΠ±ΡΡΠ½ΡΡ ΡΠΏΠΎΡΠΎΠ±Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ main(), ΠΎΡΠ»ΠΈΡΠ°ΡΡΠΈΡ ΡΡ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ argc:
int main(int argc, char *argv[]) int main(int argc, char **argv)
{ {
... ...
} }
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΡΡΠΈΠΌΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡΠΌΠΈ Π½Π΅Ρ ΡΠ°Π·Π½ΠΈΡΡ, Ρ ΠΎΡΡ ΠΏΠ΅ΡΠ²ΠΎΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΏΡΡΠ°Π»ΡΠ½ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ½ΡΡΠ½ΠΎ: argc ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»Ρ. Π Π²ΡΠΎΡΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎ, ΡΡΠΎ ΡΠΎ, ΡΡΠΎ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ. ΠΠ° ΡΠΈΡ. 2.2 ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½Π° ΡΡΠ° ΡΠΈΡΡΠ°ΡΠΈΡ.
Π ΠΈΡ. 2.2. ΠΠ°ΠΌΡΡΡ Π΄Π»Ρ argc
ΠΠΎ ΡΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ, argv[0] ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. (ΠΠ΅ΡΠ°Π»ΠΈ ΡΠΌ. Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 9.1.4.3. Β«ΠΠΌΠ΅Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ ΠΈ argv[0]Β».) ΠΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΡΠ²Π»ΡΡΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ. ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π° argv ΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ NULL.
argc ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ, ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠΌΠ΅Π΅ΡΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ²; ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π² Π‘ ΠΈΠ½Π΄Π΅ΠΊΡΡ ΠΎΡΡΡΠΈΡΡΠ²Π°ΡΡΡΡ Ρ Π½ΡΠ»Ρ, Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ 'argv[argc] == NULL' Π²ΡΠ΅Π³Π΄Π° Π²Π΅ΡΠ½ΠΎ. ΠΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π² ΠΊΠΎΠ΄Π΅ Π΄Π»Ρ Unix, Π²Ρ ΡΠ²ΠΈΠ΄ΠΈΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΠΊΠΎΠ½ΡΠ°Π½ΠΈΡ ΡΠΏΠΈΡΠΊΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΡΠ°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ ΡΠΈΠΊΠ» Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΎΠΉ, ΡΡΠΎ ΡΡΠ΅ΡΡΠΈΠΊ ΠΏΡΠ΅Π²ΡΡΠΈΠ» argc, ΠΈΠ»ΠΈ 'argv[i] == 0', ΠΈΠ»ΠΈ '*argv != NULL' ΠΈ Ρ.Π΄. ΠΠ½ΠΈ Π²ΡΠ΅ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½Ρ.
2.2.1. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° echo V7
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° V7 echo, ΠΏΠ΅ΡΠ°ΡΠ°ΡΡΠ°Ρ ΡΠ²ΠΎΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ Π²ΡΠ²ΠΎΠ΄, ΡΠ°Π·Π΄Π΅Π»ΡΡ ΠΈΡ ΠΏΡΠΎΠ±Π΅Π»Π°ΠΌΠΈ ΠΈ Π·Π°Π²Π΅ΡΡΠ°Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ. ΠΡΠ»ΠΈ ΠΏΠ΅ΡΠ²ΡΠΌ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠΌ ΡΠ²Π»ΡΠ΅ΡΡΡ -n, Π·Π°Π²Π΅ΡΡΠ°ΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» Π½ΠΎΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ. (ΠΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΏΡΠΈΠ³Π»Π°ΡΠ΅Π½ΠΈΠΉ ΠΈΠ· ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ.) ΠΠΎΡ ΠΊΠΎΠ΄[28]:
1 #include <stdio.h>
2
3 main(argc, argv) /*int main(int argc, char **argv)*/
4 int argc;
5 char *argv[];
6 {
7 register int i, nflg;