ΠΡΠΈΠΌΠ΅Ρ 8-4. Π Π°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΈΡΠ»ΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ
#!/bin/bash
# numbers.sh: Π Π°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΈΡΠ»ΠΎΠ²ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½Ρ.
# ΠΠ΅ΡΡΡΠΈΡΠ½ΠΎΠ΅: ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ
let "dec = 32"
echo "Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ = $dec" # 32
# ΠΠΎΠ±ΡΠ΅ΠΌ-ΡΠΎ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅ΠΎΠ±ΡΡΠ½ΠΎΠ³ΠΎ.
# ΠΠΎΡΡΠΌΠ΅ΡΠΈΡΠ½ΠΎΠ΅: ΡΠΈΡΠ»Π° Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ '0' (Π½ΡΠ»Ρ)
let "oct = 032"
echo "Π²ΠΎΡΡΠΌΠ΅ΡΠΈΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ = $oct" # 26
# Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΡΡΡ Π² Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅.
# --------- ------ -- -------
# Π¨Π΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠΈΡΠΈΡΠ½ΠΎΠ΅: ΡΠΈΡΠ»Π° Π½Π°ΡΠΈΠ½Π°ΡΡΡΡ Ρ '0x' ΠΈΠ»ΠΈ '0X'
let "hex = 0x32"
echo "ΡΠ΅ΡΡΠ½Π°Π΄ΡΠ°ΡΠΈΡΠΈΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ = $hex" # 50
# Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠ΅ΡΠ°ΡΠ°Π΅ΡΡΡ Π² Π΄Π΅ΡΡΡΠΈΡΠ½ΠΎΠΌ Π²ΠΈΠ΄Π΅.
# ΠΡΡΠ³ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ: ΠΠ‘ΠΠΠΠ#Π§ΠΠ‘ΠΠ
# ΠΠ‘ΠΠΠΠ Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ 2 ΠΈ 64.
# Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ Π§ΠΠ‘ΠΠ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΠ‘ΠΠΠΠ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ²,
# ΡΠΌ. Π½ΠΈΠΆΠ΅.
let "bin = 2#111100111001101"
echo "Π΄Π²ΠΎΠΈΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ = $bin" # 31181
let "b32 = 32#77"
echo "32-ΡΠΈΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ = $b32" # 231
let "b64 = 64#@_"
echo "64-ΡΠΈΡΠ½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ = $b64" # 4094
#
# ΠΠΎΡΠ°ΡΠΈΡ ΠΠ‘ΠΠΠΠ#Π§ΠΠ‘ΠΠ ΠΌΠΎΠΆΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΌ
#+ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡΠ½ΠΎΠ² ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ (ΠΎΡ 2 Π΄ΠΎ 64)
# 10 ΡΠΈΡΡ + 26 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² Π½ΠΈΠΆΠ½Π΅ΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ΅ + 26 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² Π²Π΅ΡΡ Π½Π΅ΠΌ ΡΠ΅Π³ΠΈΡΡΡΠ΅ + @ + _
echo
echo $((36#zz)) $((2#10101010)) $((16#AF16)) $((53#1aA))
# 1295 170 44822 3375
# ΠΠ°ΠΆΠ½ΠΎΠ΅ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅:
# --------------
# ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΡΠΈΡΠ»Π°, Π²ΡΡ ΠΎΠ΄ΡΡΠΈΡ Π·Π° Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎ,
#+ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΠ‘ΠΠΠΠ ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ
#+ Π±ΡΠ΄Π΅Ρ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡ ΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΎΠ± ΠΎΡΠΈΠ±ΠΊΠ°Ρ .
let "bad_oct = 081"
# numbers.sh: let: oct = 081: value too great for base (error token is "081")
# ΠΠ»Ρ Π·Π°ΠΏΠΈΡΠΈ Π²ΠΎΡΡΠΌΠ΅ΡΠΈΡΠ½ΡΡ ΡΠΈΡΠ΅Π» Π΄ΠΎΠΏΡΡΠΊΠ°Π΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ
#+ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΡΡΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 0 - 7.
exit 0 # Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Rich Bartell ΠΈ Stephane Chazelas, Π·Π° ΡΠ°Π·ΡΡΡΠ½Π΅Π½ΠΈΡ.
Π§Π°ΡΡΡ 3. Π£Π³Π»ΡΠ±Π»Π΅Π½Π½ΡΠΉ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»
ΠΠ»Π°Π²Π° 9. Π Π²ΠΎΠΏΡΠΎΡΡ ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ΄Π°ΡΡ ΡΡΠ΅Π½Π°ΡΠΈΡΠΌ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΌΠΎΡΡ ΠΈ Π³ΠΈΠ±ΠΊΠΎΡΡΡ, Π° Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΡΡΠΈΡΡ Π²ΡΠ΅ ΡΠΎΠ½ΠΊΠΎΡΡΠΈ ΠΈ Π½ΡΠ°Π½ΡΡ.
9.1. ΠΠ½ΡΡΡΠ΅Π½Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
ΠΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ $BASH
ΠΏΡΡΡ ΠΊ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ Bash
bash$ echo $BASH
/bin/bash
$BASH_VERSINFO[n]
ΡΡΠΎ ΠΌΠ°ΡΡΠΈΠ², ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· 6 ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π²Π΅ΡΡΠΈΠΈ Bash. ΠΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠ° Π½Π° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ $BASH_VERSION, ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΡ Π½ΠΈΠΆΠ΅.
# ΠΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π²Π΅ΡΡΠΈΠΈ Bash:
for n in 0 1 2 3 4 5
do
echo "BASH_VERSINFO[$n] = ${BASH_VERSINFO[$n]}"
done
# BASH_VERSINFO[0] = 2 # Major version no.
# BASH_VERSINFO[1] = 05 # Minor version no.
# BASH_VERSINFO[2] = 8 # Patch level.
# BASH_VERSINFO[3] = 1 # Build version.
# BASH_VERSINFO[4] = release # Release status.
# BASH_VERSINFO[5] = i386-redhat-linux-gnu # Architecture
# (same as $MACHTYPE).
$BASH_VERSION
Π²Π΅ΡΡΠΈΡ Bash, ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅
bash$ echo $BASH_VERSION
2.04.12(1)-release
tcsh% echo $BASH_VERSION
BASH_VERSION: Undefined variable.
ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ $BASH_VERSION -- Π½Π΅ΠΏΠ»ΠΎΡ ΠΎΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΡΠΈΠΏΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΠΎΠ±ΠΎΠ»ΠΎΡΠΊΠΈ, ΠΏΠΎΠ΄ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΠΊΡΠΈΠΏΡ. ΠΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ $SHELL Π½Π΅ Π²ΡΠ΅Π³Π΄Π° Π΄Π°Π΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ.
$DIRSTACK
ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π²Π΅ΡΡΠΈΠ½Ρ ΡΡΠ΅ΠΊΠ° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ² (ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ pushd ΠΈ popd)
ΠΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ dirs, Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ³ΠΎ, ΡΡΠΎ dirs ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΡΠ΅ΠΊΠ° ΠΊΠ°ΡΠ°Π»ΠΎΠ³ΠΎΠ².
$EDITOR
Π·Π°Π΄Π°Π½Π½ΡΠΉ ΠΏΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ, Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΠΉ ΡΠΊΡΠΈΠΏΡΠΎΠΌ, ΠΎΠ±ΡΡΠ½ΠΎ vi ΠΈΠ»ΠΈ emacs.
$EUID
"ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ" ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (Effective User ID)
ΠΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ Π½ΠΎΠΌΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΏΡΠ°Π²Π° ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π±ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ΅Π½Ρ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ su.
ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ $EUID Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΡΠΌ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ $UID.
$FUNCNAME
ΠΈΠΌΡ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ
xyz23 ()
{
echo "ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ $FUNCNAME." # ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ xyz23.
}
xyz23
echo "FUNCNAME = $FUNCNAME" # FUNCNAME =
# ΠΡΡΡΠΎΠ΅ (Null) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Π΅ΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ.
$GLOBIGNORE
ΠΠ΅ΡΠ΅ΡΠ΅Π½Ρ ΡΠ°Π±Π»ΠΎΠ½Π½ΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΡΠΎΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π½Ρ ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»ΠΎΠ² (globbing) .
$GROUPS
Π³ΡΡΠΏΠΏΡ, ΠΊ ΠΊΠΎΡΠΎΡΡΠΌ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ
ΠΡΠΎ ΡΠΏΠΈΡΠΎΠΊ Π³ΡΡΠΏΠΏ (ΠΌΠ°ΡΡΠΈΠ²) ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΡΡ Π½ΠΎΠΌΠ΅ΡΠΎΠ² Π³ΡΡΠΏΠΏ Π΄Π»Ρ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΊΠ°ΠΊ ΡΠΎ Π·Π°ΠΏΠΈΡΠ°Π½ΠΎ Π² /etc/passwd.
root# echo $GROUPS
0
root# echo ${GROUPS[1]}
1
root# echo ${GROUPS[5]}
6
$HOME
Π΄ΠΎΠΌΠ°ΡΠ½ΠΈΠΉ ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΡΠΎ /home/username (ΡΠΌ. ΠΡΠΈΠΌΠ΅Ρ 9-13)
$HOSTNAME
Π‘Π΅ΡΠ΅Π²ΠΎΠ΅ ΠΈΠΌΡ Ρ ΠΎΡΡΠ° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ hostname Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΡΡΠΈΡ ΡΡΠ΅Π½Π°ΡΠΈΠ΅Π² Π½Π° Π·Π°Π³ΡΡΠ·ΠΊΠ΅ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ½ΡΡΡΠ΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ $HOSTNAME Bash ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²ΠΎΠΌ Π²ΡΠ·ΠΎΠ²Π° ΡΡΠ½ΠΊΡΠΈΠΈ gethostname(). Π‘ΠΌ. ΡΠ°ΠΊ ΠΆΠ΅ ΠΡΠΈΠΌΠ΅Ρ 9-13.
$HOSTTYPE
ΡΠΈΠΏ ΠΌΠ°ΡΠΈΠ½Ρ
ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ $MACHTYPE, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΠ΅Ρ Π°ΠΏΠΏΠ°ΡΠ°ΡΠ½ΡΡ Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΡ.
bash$ echo $HOSTTYPE
i686
$IFS
ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Ρ ΠΏΠΎΠ»Π΅ΠΉ Π²ΠΎ Π²Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ ΡΡΡΠΎΠΊΠ΅ (IFS -- Input Field Separator)
ΠΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ -- ΠΏΡΠΎΠ±Π΅Π»ΡΠ½ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» (ΠΏΡΠΎΠ±Π΅Π», ΡΠ°Π±ΡΠ»ΡΡΠΈΡ ΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΡΡΠΎΠΊΠΈ), Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π΄Π»Ρ ΡΠ°Π·Π±ΠΎΡΠ° ΡΡΡΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Ρ Π·Π°ΠΏΡΡΡΠΌΠΈ. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΏΡΠΈ ΡΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ $*, Bash ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈΠ· $IFS Π΄Π»Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ². Π‘ΠΌ. ΠΡΠΈΠΌΠ΅Ρ 5-1.
bash$ echo $IFS | cat -vte
$
bash$ bash -c 'set w x y z; IFS=":-;"; echo "$*"'
w:x:y:z
ΠΡΠΈ Π²ΡΠ΅ΠΌ ΠΏΡΠΈ ΡΠΎΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ $IFS ΠΏΡΠΎΠ±Π΅Π»ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ½Π°ΡΠ΅, ΡΠ΅ΠΌ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅.
ΠΡΠΈΠΌΠ΅Ρ 9-1. $IFS ΠΈ ΠΏΡΠΎΠ±Π΅Π»ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ
#!/bin/bash
# ΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ $IFS, ΠΏΡΠΎΠ±Π΅Π»ΡΠ½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡΡΡ ΠΈΠ½Π°ΡΠ΅, ΡΠ΅ΠΌ Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅.
output_args_one_per_line()
{
for arg
do echo "[$arg]"
done
}
echo; echo "IFS=\" \""
echo "-------"
IFS=" "
var=" a b c "
output_args_one_per_line $var # output_args_one_per_line `echo " a b c "`
#
# [a]
# [b]
# [c]
echo; echo "IFS=:"
echo "-----"
IFS=:
var=":a::b:c:::" # Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΠ±Π΅Π»Ρ Π·ΠΌΠ΅Π½Π΅Π½Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ ":".
output_args_one_per_line $var
#
# []
# [a]
# []
# [b]
# [c]
# []
# []
# []
# Π’ΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΈ Ρ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΠ΅Π»Π΅ΠΌ ΠΏΠΎΠ»Π΅ΠΉ "FS" Π² awk.
# Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Stephane Chazelas.
echo
exit 0
(Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ S. C., Π·Π° ΡΠ°Π·ΡΡΡΠ½Π΅Π½ΠΈΡ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ.)
$LC_COLLATE
Π§Π°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² .bashrc ΠΈΠ»ΠΈ /etc/profile, ΡΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ Π·Π°Π΄Π°Π΅Ρ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»ΠΎΠ² ΠΈ Π² ΠΏΠΎΠΈΡΠΊΠ΅ ΠΏΠΎ ΡΠ°Π±Π»ΠΎΠ½Ρ. ΠΡΠΈ Π½Π΅Π²Π΅ΡΠ½ΠΎΠΉ Π½Π°ΡΡΡΠΎΠΉΠΊΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ LC_COLLATE ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²Π΅ΡΡΠΌΠ° Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ.
ΠΠ°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ 2.05, Bash, Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈΠΌΠ΅Π½ ΡΠ°ΠΉΠ»ΠΎΠ², Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ ΡΠ°Π·Π»ΠΈΡΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΠΈ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ², Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ . ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ,, ls [A-M]* Π²ΡΠ²Π΅Π΄Π΅Ρ ΠΊΠ°ΠΊ File1.txt, ΡΠ°ΠΊ ΠΈ file1.txt. ΠΠΎΠ·Π²ΡΠ°Ρ ΠΊ ΠΎΠ±ΡΠ΅ΠΏΡΠΈΠ½ΡΡΠΎΠΌΡ ΡΡΠ°Π½Π΄Π°ΡΡΡ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π² ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ LC_COLLATE Π² Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ C ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ export LC_COLLATE=C Π² ΡΠ°ΠΉΠ»Π΅ /etc/profile ΠΈ/ΠΈΠ»ΠΈ ~/.bashrc.
$LC_CTYPE
ΠΡΠ° Π²Π½ΡΡΡΠ΅Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠ΄ΠΈΡΠΎΠ²ΠΊΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ². ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΈ ΠΏΠΎΠΈΡΠΊΠ΅ ΠΏΠΎ ΡΠ°Π±Π»ΠΎΠ½Ρ.
$LINENO
ΠΠΎΠΌΠ΅Ρ ΡΡΡΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡ. ΠΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΈΠΌΠ΅Π΅Ρ ΡΠΌΡΡΠ» ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΡΡΠ΅Π½Π°ΡΠΈΡ ΠΈ ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π² ΠΎΡΠ»Π°Π΄ΠΎΡΠ½ΡΡ ΡΠ΅Π»ΡΡ .