рдХреНрдпреЛрдВ рдорд╛рд░рдирд╛?
рдмреИрд╢ рдореЗрдВ рд╕рд░рдгрд┐рдпрд╛рдБ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдореЛрдб рд╣реИрдВред рдЬрдм рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмреИрд╢ рд▓рдЧрднрдЧ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдбрд┐рдВрдЧ рдкреНрд░рдерд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддрд╛ рд╣реИред
рдордЫрд▓реА рдореЗрдВ рдЧрд▓рддреА рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдордЫрд▓реА рдореЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдФрд░ рдлрд┐рд░ рдордЫрд▓реА рд╕реЗ рдмреИрд╢ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред
рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛
рдпрд╣ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рд╢реЗрд▓рд╣рд╛рд░реНрдбрди рдХреЗ рд╕рд╛рде рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЗрдЦрдХ
рд╢реЗрд▓рдЪреЗрдХ рдХреА рднреА рд╕рд┐рдлрд╛рд░рд┐рд╢
рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╢реЗрд▓рд╣рд╛рд░реНрдбрди рдирд┐рдпрдо рд╢реЗрд▓рдЪреЗрдХ рд╕реЗ рд╡рд┐рдЪрд▓рди рди рдХрд░реЗрдВред
рдмреИрд╢ рдПрдХ рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИ рдЬрд╣рд╛рдВ
рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛
рд╕рдмрд╕реЗ рд╕рд╣реА рддрд░реАрдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИ ред рдпрджрд┐ рдЖрдк рдмреИрд╢ рд╕реБрд░рдХреНрд╖рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд░реАрдХреНрд╖рд╛ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ
BashPitashes рдХрд╛ рдкрд╣рд▓рд╛ рдирд┐рдпрдо рд╣реЛрдЧрд╛: рд╣рдореЗрд╢рд╛ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдореБрдЦреНрдп рдЪреАрдЬрд╝ рдЬреЛ рдЖрдкрдХреЛ bash рдореЗрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ
рдЙрдиреНрдорддреНрдд рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди! рдПрдХ рдирд┐рд░реНрд╡рд┐рд╡рд╛рдж рдЪрд░ рдХреЛ рдПрдХ рд▓рдЯрдХреЗ рд╣реБрдП рдмрдо рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: рдпрд╣ рдПрдХ рдЕрдВрддрд░рд┐рдХреНрд╖ рдХреЗ рд╕рдВрдкрд░реНрдХ рдореЗрдВ рдлрдЯ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рдВ, рдпрд╣
рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд░реНрде рдореЗрдВ рдлрдЯ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ,
$var
$(cmd)
рдЬреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдПрдХреНрд╕рдЯреЗрдВрд╢рди
рд╢рдмреНрдж $(cmd)
рд╢рдмреНрдж- рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдЬрдм рдЖрдВрддрд░рд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рд╡рд┐рд╢реЗрд╖
$IFS
рдЪрд░ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдЕрджреГрд╢реНрдп рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдХреНрд╕рд░ рдкрд░рд┐рдгрд╛рдо 1 рддрддреНрд╡ рдХрд╛ рдПрдХ рд╕рд░рдгреА рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдЕрдкреНрд░рднреЗрджреНрдп рд╣реЛрддрд╛ рд╣реИред
рди рдХреЗрд╡рд▓ рдпрд╣ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реИ, рдмрд▓реНрдХрд┐ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб (
*?
) рднреА рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢рдмреНрдж рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рд╢рдмреНрдж рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рд╣реИ, рддреЛ рд╢рдмреНрдж рд╡рд╛рдЗрд▓реНрдбрдХрд╛рд░реНрдб рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдХрд┐рд╕реА рднреА рдЙрдкрдпреБрдХреНрдд рдлрд╝рд╛рдЗрд▓ рдкрде рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рддреЛ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рд▓рдЧрддреА рд╣реИ!
рдХреЛрдЯреЗрд╢рди рд╢рдмреНрдж рд╡рд┐рднрд╛рдЬрди рдФрд░ рдХрдорд╛рдВрдб рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд▓рд┐рдП рд╢рдмреНрдж рд╡рд┐рднрд╛рдЬрди рдФрд░ рдкреИрдЯрд░реНрди рд╡рд┐рд╕реНрддрд╛рд░ рдХреЛ рджрдмрд╛ рджреЗрддрд╛ рд╣реИред
рдЪрд░ рд╡рд┐рд╕реНрддрд╛рд░:
- рдЕрдЪреНрдЫрд╛:
"$my_var"
- рдмреБрд░рд╛:
$my_var
рдХрдорд╛рдВрдб рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди:
- рдЕрдЪреНрдЫрд╛:
"$(cmd)"
- рдмреБрд░рд╛:
$(cmd)
рд╡реИрдХрд▓реНрдкрд┐рдХ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрд╡рд╛рдж рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрди рдХрднреА рднреА рдЪреЛрдЯ рдирд╣реАрдВ рдкрд╣реБрдВрдЪрд╛рдПрдВрдЧреЗ, рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдирд┐рдпрдо рдпрд╣ рд╣реИ рдХрд┐ рдЕрдирдЫреБрдП рдЪрд░ рдХреЛ рдЙрджреНрдзреГрдд рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЖрдкрдХреЗ рд▓рд╛рдн рдХреЗ рд▓рд┐рдП рд╕реАрдорд╛ рдЕрдкрд╡рд╛рджреЛрдВ рдХреА рддрд▓рд╛рд╢ рдирд╣реАрдВ рдХреАред рдпрд╣ рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдЧрд▓рдд рдЕрднреНрдпрд╛рд╕ рд╕рдВрджреЗрд╣ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рд╡реНрдпрд╛рдкрдХ рд╣реИ: рдХрдИ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдФрд░ рдЙрди рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рдЯреВрдЯреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ ...
рд╢реЗрд▓рд╣рд╛рд░реНрдбрди рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдЕрдкрд╡рд╛рджреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИ - рдХреНрдпрд╛ рдпреЗ рдЪрд░
$?
рдЬреИрд╕реА рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рд╣реИрдВ
$?
,
$#
рдФрд░
${#array[@]}
ред
рдХреНрдпрд╛ рдореБрдЭреЗ рдмреИрдХрдЯрд┐рдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдХрдорд╛рдВрдб рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдореЗрдВ рдирд┐рдореНрди рд░реВрдк рднреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:
- рд╕рд╣реА:
"`cmd`"
- рдЦрд░рд╛рдм:
`cmd`
рдпрджреНрдпрдкрд┐ рдЗрд╕ рд╢реИрд▓реА рдХрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдиреЗрд╕реНрдЯ рдХреЗ рдирд┐рд╢рд╛рди рдореЗрдВ рдХрдо рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рдиреЗрд╕реНрдЯреЗрдб рд╣реЛрдиреЗ рдкрд░ рдХрдо рдкрдардиреАрдп рд▓рдЧрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╕рд░реНрд╡рд╕рдореНрдорддрд┐ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рд╣реИ: рдЗрд╕рд╕реЗ рдмрдЪреЗрдВред
рд╢реЗрд▓рд╣рд╛рд░реНрдбрди рдбреЙрд▓рд░ рдореЗрдВ рдмреНрд░реИрдХреЗрдЯ рдореЗрдВ рдРрд╕реЗ рдЪреЗрдХрдорд╛рд░реНрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВред
рдХреНрдпрд╛ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рдмреНрд░реИрдХреЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдкреНрд░рдХреНрд╖реЗрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдЖрдорддреМрд░ рдкрд░ рдирд┐рд░рд░реНрдердХ рд╣реЛрддреЗ рд╣реИрдВ:
- рдЦрд░рд╛рдм:
some_command $arg1 $arg2 $arg3
- рдЦрд░рд╛рдм рдФрд░
some_command ${arg1} ${arg2} ${arg3}
: some_command ${arg1} ${arg2} ${arg3}
- рдЕрдЪреНрдЫрд╛ рд╣реИ, рд▓реЗрдХрд┐рди
some_command "${arg1}" "${arg2}" "${arg3}"
: some_command "${arg1}" "${arg2}" "${arg3}"
- рдЕрдЪреНрдЫрд╛:
some_command "$arg1" "$arg2" "$arg3"
рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рд╣рдореЗрд╢рд╛ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЗ рд▓реЗрдЦрдХ рдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдЙрдкрдпреЛрдЧ рдФрд░ рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЗ рд╕рд╣реА рдЙрдкрдпреЛрдЧ рдХреЗ рдмреАрдЪ рдПрдХ рдордЬрдмреВрдд рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рд╣рд╕рдВрдмрдВрдз рд╣реИ - рд▓рдЧрднрдЧ рд╣рд░ рдХреЛрдИ "рдЕрдЪреНрдЫреЗ рд▓реЗрдХрд┐рди рдХреНрд░рд┐рдпрд╛" рд░реВрдк рдХреЗ рдмрдЬрд╛рдп "рдмреБрд░рд╛ рдФрд░ рдХреНрд░рд┐рдпрд╛" рдЪреБрдирддрд╛ рд╣реИ!
рдЖрдкрдХреЗ рд▓реЗрдЦрдХ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд:
- рдХреБрдЫ рдЧрд▓рдд рдХрд░рдиреЗ рдХреЗ рдбрд░ рдХреЗ рдХрд╛рд░рдг: рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЦрддрд░реЗ (рдЙрджреНрдзрд░рдгреЛрдВ рдХреА рдХрдореА) рдХреЗ рдмрдЬрд╛рдп, рд╢реБрд░реБрдЖрддреА рдЪрд┐рдВрддрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐
$prefix
рдЪрд░ "$prefix_postfix"
рдЪрд░ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред - рдХрд╛рд░реНрдЧреЛ рдкрдВрде: рдЧрд▓рдд рднрдп рдХреА рд╡рд╛рдЪрд╛ рдореЗрдВ рдХреЛрдб рд▓рд┐рдЦрдирд╛, рдЬреЛ рдЗрд╕рдХреЗ рдкрд╣рд▓реЗ рдерд╛ред
- рдмреНрд░реИрдХреЗрдЯ рдЕрдиреБрдореЗрдп рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реАрдорд╛ рдХреЗ рд▓рд┐рдП рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рд╢реЗрд▓рд╣рд╛рд░реНрдбрди рдЗрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕рд░рд▓рддрдо рдЕрдЪреНрдЫреЗ рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддрд╛ рд╣реИред
рдФрд░ рдЕрдм рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рдХреНрд╖реЗрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЬрд╣рд╛рдВ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИрдВ:
- рдЦрд╝рд░рд╛рдм (
$var1"more string content"$var2
): $var1"more string content"$var2
- рдЕрдЪреНрдЫрд╛ (рд╕рдВрдХреНрд╖рд┐рдкреНрдд):
"$var1""more string content""$var2"
- рдЕрдЪреНрдЫрд╛ (рдкреНрд░рдХреНрд╖реЗрдк):
"${var1}more string content${var2}"
рдмрд╢ рдореЗрдВ рд╕рдорд╛рд╕ рдФрд░ рдкреНрд░рдХреНрд╖реЗрдк рднреА рд╕рд░рдгрд┐рдпреЛрдВ рдореЗрдВ рд╕рдорддреБрд▓реНрдп рд╣реИрдВ (рдЬреЛ рдХрд┐ рд╣рд╛рд╕реНрдпрд╛рд╕реНрдкрдж рд╣реИ)ред
рдХреНрдпреЛрдВрдХрд┐ рд╢реЗрд▓рд╣рд╛рд░реНрдбрди рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рд╕рд╣реА рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИред рдпрд╣ "рдЕрдЪреНрдЫрд╛ (рдкреНрд░рдХреНрд╖реЗрдк)" рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд╣реИ: рд╢реЗрд▓рд╣рд╛рд░реНрдбрди рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдпрд╣ рдХреИрдирди рдХрд╛ рд╕рд╣реА рд░реВрдк рд╣реЛрдЧрд╛ред
рд╢реЗрд▓рд╣рд╛рд░реНрдбрди рдЕрдм рдЬрд░реВрд░рдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдХреЛ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╣рдЯрд╛ рд░рд╣рд╛ рд╣реИ: рдПрдХ рдЦрд░рд╛рдм рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, var1 рдХреЛ рдХреЛрд╖реНрдардХ рдХреЗ рд╕рд╛рде рдЖрдкреВрд░реНрддрд┐ рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдиреНрд╣реЗрдВ "рдЕрдЪреНрдЫрд╛ (рдкреНрд░рдХреНрд╖реЗрдк)" рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рднреА var2 рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рд▓рд╛рдЗрди рдХреЗ рдЕрдВрдд рдореЗрдВ рдХрднреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдЕрдВрддрд┐рдо рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЙрд▓рдЯ рд╣реЛ рд╕рдХрддреА рд╣реИред
рдЧреЛрддреНрд░: рдЧрд┐рдиреЗ рд╣реБрдП рддрд░реНрдХ
рд╕рд╛рдорд╛рдиреНрдп рдЪрд░
рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдирд╛рдореЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд (regex рдореЗрдВ:
[_a-zA-Z][_a-zA-Z0-9]*
), рдЧрд┐рдиреЗ рд╣реБрдП рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЛрд╖реНрдардХ (рдкрдВрдХреНрддрд┐ рдкреНрд░рдХреНрд╖реЗрдк рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд╢реЗрд▓рдЪреЗрдХ рдХрд╣рддрд╛ рд╣реИ:
echo "$10" ^-- SC1037: Braces are required for positionals over 9, eg ${10}.
рд╢реЗрд▓рд╣рд╛рд░реНрдбрди рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ (рдЕрдВрддрд░ рдХреЛ рдмрд╣реБрдд рд╕реВрдХреНрд╖реНрдо рдорд╛рдирддрд╛ рд╣реИ)ред
рдЪреВрдВрдХрд┐ рдХреЛрд╖реНрдардХ 9 рддрдХ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИ, рд╢реЗрд▓рд╣рд╛рд░реНрдбрди рдЙрдиреНрд╣реЗрдВ рд╕рднреА рдЧрд┐рдиреЗ рд╣реБрдП рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
Arrays рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
рд╕рднреА рдЪрд░ рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ рдЫрджреНрдо рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рддрд╛рд░ред
рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХреНрд░рд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдмреИрд╢рд╡рд╛рдж рдЬреНрдпрд╛рджрд╛рддрд░ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдкреЛрд╕рд┐рдХреНрд╕ рд╕рдВрдЧрддрддрд╛ рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рд┐рд░реНрдл рдПрдХ рдХрд╛рд░рдг рд╣реИред
рдЕрдЪреНрдЫрд╛:
array=( a b ) array+=(c) if [ ${#array[@]} -gt 0 ]; then rm -- "${array[@]}" fi
рдЦрд░рд╛рдм:
pseudoarray=" \ a \ b \ " pseudoarray="$pseudoarray c" if ! [ "$pseudoarray" = '' ]; then rm -- $pseudoarray fi
рдЗрд╕реАрд▓рд┐рдП рд╕рд░рдгрд┐рдпрд╛рдБ рд╢реЗрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рдРрд╕рд╛ рдореВрд▓ рдХрд╛рд░реНрдп рд╣реИрдВ:
рдХрдорд╛рдВрдб рдХреЗ
рддрд░реНрдХ рдореВрд▓ рд░реВрдк рд╕реЗ рдПрд░реЗ рд╣реИрдВ (рдФрд░ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрдорд╛рдВрдб рдФрд░ рддрд░реНрдХ рд╣реИрдВ)ред рд╣рдо рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЦреЛрд▓, рдЬреЛ рдХреГрддреНрд░рд┐рдо рд░реВрдк рд╕реЗ рдХрдИ рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИ, рд╣рд╛рд╕реНрдпрдкреВрд░реНрдг рдФрд░ рдмреЗрдХрд╛рд░ рд╣реЛрдЧрд╛ред рдЗрд╕ рд╢реНрд░реЗрдгреА рдХреЗ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рдЧреЛрд▓реЗ рдореЗрдВ
рдбреИрд╢ рдФрд░ рдмрд┐рдЬреАрдмреЙрдХреНрд╕ рдРрд╢ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдпреЗ рдиреНрдпреВрдирддрдо POSIX рд╕рдВрдЧрдд рдЧреЛрд▓реЗ рд╣реИрдВ - рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рд╛рдорд╛рди POSIX рдкрд░
рди рд╣реЛ рддреЛ рдХреНрдпрд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ?
рдЕрд╕рд╛рдзрд╛рд░рдг рдорд╛рдорд▓реЗ рдЬрдм рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ рдХреЛ рддреЛрдбрд╝рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ
рдбреЗрдЯрд╛ рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рд░реВрдк рдореЗрдВ
\v
рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг (рджреВрд╕рд░реА рдШрдЯрдирд╛ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ):
IFS=$'\v' read -d '' -ra a < <(printf '%s\v' "$s") || true
рдЗрд╕ рддрд░рд╣ рд╣рдо рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЗ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрдЪрддреЗ рд╣реИрдВ, рдФрд░ рдпрджрд┐ рдбреЗрдЯрд╛ рд╡рд┐рднрд╛рдЬрдХ
\n
рд╣реИ рддреЛ рднреА рдпрд╣ рд╡рд┐рдзрд┐ рдХрд╛рдо рдХрд░рддреА рд╣реИред рдбреЗрдЯрд╛ рд╡рд┐рднрд╛рдЬрдХ рдХреА рджреВрд╕рд░реА рдШрдЯрдирд╛ рдЕрдВрддрд┐рдо рддрддреНрд╡ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХрд░рддреА рд╣реИ рдпрджрд┐ рдпрд╣ рдПрдХ рд╕реНрдерд╛рди рдмрди рдЬрд╛рддрд╛ рд╣реИред рдХрд┐рд╕реА рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП,
-d
рд╡рд┐рдХрд▓реНрдк рдкрд╣рд▓реЗ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП in
-rad ''
рдореЗрдВ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ
-rad ''
рд▓реБрднрд╛рд╡рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЪреВрдБрдХрд┐ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдиреЙрдирдЬрд╝реЗрд░реЛ рд╡реИрд▓реНрдпреВ рд░рд┐рдЯрд░реНрди рдкрдврд╝рддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрд░реЗрдХреНрд╕рд┐рдЯ ((
|| true
)) рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдпрджрд┐ рд╕рдХреНрд╖рдо рд╣реЛ рдмреИрд╢ 4.0, 4.1, 4.2, 4.3 рдФрд░ 4.4 рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рдмреИрд╢ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ 4.4:
readarray -td $'\v' a < <(printf '%s\v' "$s")
рдХрд╣рд╛рдБ рдПрдХ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ:
рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:
- рдорд╛рдорд▓рд╛:
- рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХреЗ рдореБрджреНрджреЗ:
env
рд▓рд┐рдП рдкреВрд░реНрдг рдкрде рд╕рдВрднрд╡рддрдГ рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИ рдЬреЛ bash
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рдкрде рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред рдЖрдк рдирд┐рдХреНрд╕рди рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ ред POSIX рдХреЛ env рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди bash рдХреА рдирд╣реАрдВред - рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдореБрджреНрджреЗ: рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП,
-euo pipefail
рдЬреИрд╕реЗ рд╡рд┐рдХрд▓реНрдк -euo pipefail
рдЕрдиреБрдХреВрд▓ рд░реВрдк рд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ! env
redirect рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рднрд▓реЗ рд╣реА рдЖрдкрдХрд╛ рд╢реЗрдмрдВрдЧ #!/bin/bash
рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдпрд╣ рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрдЧрд╣ рдирд╣реАрдВ рд╣реИ рдЬреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рд╡рд┐рдХрд▓реНрдк рдЬреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдореВрд▓реНрдп рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ set -x
, рдпрджрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
set -u
рдлреАрдЪрд░ рдЪреЗрдХ рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рдЕрдирдСрдлрд┐рд╢рд┐рдпрд▓ рдмреИрд╢ рд╕рдЦреНрдд рдореЛрдб рд╕реЗ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдореЗрдВ рд╕рднреА рд╕рдЦреНрдд рдмреИрд╢ рдореЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╢реЗрд▓рдЪреЗрдХ / рд╢реЗрд▓рд╣рд╛рд░реНрдбрди рд╕рдВрдЧрддрддрд╛ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╕рдм рдХреБрдЫ рдФрд░ рд╕рдм рдХреБрдЫ рдЬреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдЦреНрдд рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, set -u
рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд╛рд╢ 4.3 рдФрд░ рдкреВрд░реНрд╡ рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП ред рдЪреВрдВрдХрд┐ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдЦрд╛рд▓реА рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЙрди рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рд░рдгрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЗрд╕ рдЧрд╛рдЗрдб рд╕реЗ рджреВрд╕рд░рд╛ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЯрд┐рдк рд╣реИ (рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХреЗ рдмрд╛рдж) рдФрд░ рдПрдХрдорд╛рддреНрд░ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╣рдо POSIX рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХрд╛ рддреНрдпрд╛рдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдЕрд╕реНрд╡реАрдХрд╛рд░реНрдп: рдпрд╛ рддреЛ set -u
рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдпрд╛ Bsh 4.4 рдпрд╛ Zsh рдЬреИрд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕рд╛рдорд╛рдиреНрдп рд╢реЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВред рдпрд╣ рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдп рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЖрд╕рд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдмрд╛рдд рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЕрднреА рднреА рдмреИрд╢ рдХреЗ рдкреНрд░рд╛рдЪреАрди рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЖрдкрдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдЧрд╛ред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, set -u
рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рдм рдХреБрдЫ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдХрд╛рдо рдХрд░реЗрдЧреА ( set -e
рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддреЗ)ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдЗрд╕ рдзрд╛рд░рдгрд╛ рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдФрд░ рд╡рд┐рдХрд╛рд╕ рдмреИрд╢ 4.4 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рд╢реЗрд▓ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ (рдЗрд╕рд▓рд┐рдП set -u
рдкрд╣рд▓реВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдпрджрд┐ рдпрд╣ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рд╕рдВрдЧрддрддрд╛ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реИ (рд╕рдВрд╕реНрдХрд░рдг рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреА рд╣реИ), рдпрд╛ set -u
рдордирд╛ рдХрд░ рджреЗрддрд╛ рд╣реИредshopt -s nullglob
рдмрд▓реЛрдВ рдХреЗ for f in *.txt
ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ (рдЙрд░реНрдл рдкрд╛рд╕рдЧреНрд▓реЛрдм ) рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рд╢реВрдиреНрдп рдкрд░рд┐рдгрд╛рдо рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрдИ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдЦрддрд░рдирд╛рдХ рд╣реИред рдЧреНрд▓реЛрдмрд╕реНрдЯрд╛рд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкреБрдирд░рд╛рд╡рд░реНрддреА рджреЗрдЦрдиреЗ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рд╣реИред рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рд▓реЗрдХрд┐рди рдирд╣реАрдВ:
IFS='' set -f shopt -s failglob
- рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдЖрдВрддрд░рд┐рдХ рдХреНрд╖реЗрддреНрд░ рдкрд░рд┐рд╕реАрдорд╛ рдХреЛ рд╕реЗрдЯ рдХрд░рдирд╛ рд╢рдмреНрдж рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣ рдЪрд░ рдФрд░ рдХрдорд╛рдВрдб рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдзреВрд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рд╣реИ, рдФрд░ рдЬрдм рд╕реЗ рдЖрдк рдЙрджреНрдзрд░рдг рдЪрд┐рд╣реНрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдпрд╣ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рдЕрднреА рднреА рдЙрджреНрдзрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдХрд╛рд░рдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЦрд╛рд▓реА рд╕рд░рдгрд┐рдпрд╛рдВ рдмрди рдЬрд╛рддреА рд╣реИрдВ (рдЬреИрд╕рд╛ рдХрд┐
test $x = ""
) рдФрд░ рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рдЯреЗрдореНрдкрд▓реЗрдЯ рд╡рд┐рд╕реНрддрд╛рд░ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдЪрд░ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рднреА read
рддрд░рд╣ рдЖрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛, рдЬреЛ cat /etc/fstab | while read -r dev mnt fs opt dump pass; do echo "$fs"; done'
рдЬреИрд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ cat /etc/fstab | while read -r dev mnt fs opt dump pass; do echo "$fs"; done'
cat /etc/fstab | while read -r dev mnt fs opt dump pass; do echo "$fs"; done'
ред - рдЯреЗрдореНрдкрд▓реЗрдЯ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдЕрдХреНрд╖рдо рд╣реИ: рди рдХреЗрд╡рд▓ рдХреБрдЦреНрдпрд╛рдд рдЕрдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд┐рд╕реНрддрд╛рд░, рдмрд▓реНрдХрд┐ рдкрд░реЗрд╢рд╛рдиреА рдореБрдХреНрдд рдкреНрд░рддреНрдпрдХреНрд╖ рд╡рд┐рд╕реНрддрд╛рд░ рднреА, рдЬреЛ рдХрд┐ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред рдФрд░ рдпрд╣ рд╢реЗрд▓рдЪреЗрдХ / рд╢реЗрд▓рд╣рд╛рд░реНрдбрди рд╕рдВрдЧрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред
- Nullglob рдХреЗ рд╡рд┐рдкрд░реАрдд, failglob рдПрдХ рдЕрд╢рдХреНрдд рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдпрд╣ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
rm -- *.txt
(рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрднреА рднреА рд╢реВрдиреНрдп рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ), рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдЕрд╕рдлрд▓ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рддрднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрдм рдЖрдк рд╢реВрдиреНрдп рдкрд░рд┐рдгрд╛рдо рдХреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдорддреМрд░ рдкрд░ рдЖрдк рд╕рдореВрд╣ рддрд░реНрдХреЛрдВ рдХреЛ рдХрдорд╛рдВрдб рддрд░реНрдХреЛрдВ рдореЗрдВ рдирд╣реАрдВ рд░рдЦреЗрдВрдЧреЗ рдЬрдм рддрдХ рдХрд┐ рдЖрдк рдПрдХ рд╣реА рдорд╛рди рдирд╣реАрдВ рд▓реЗрддреЗред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣рдореЗрд╢рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ nullglob рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЙрди рдирд┐рд░реНрдорд╛рдгреЛрдВ рдореЗрдВ рдЕрд╢рдХреНрдд рддрд░реНрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рд▓реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд▓реВрдк рдпрд╛ рдХрд┐рд╕реА рд╕рд░рдгреА рдореЗрдВ рдорд╛рди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ ( txt_files=(*.txt)
)ред
рдХреИрд╕реЗ рдПрдХ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрдХреНрдЬрд┐рдЯ рд╕реНрдерд┐рддрд┐ рдЕрдВрддрд┐рдо рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИред рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдлрд▓рддрд╛ рдпрд╛ рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред
рд╕рдмрд╕реЗ рдмреБрд░реА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ рдПрдХ рдФрд░ рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдерд┐рддрд┐ рдХреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред рдпрджрд┐ рд╕реНрдерд┐рддрд┐ рдЭреВрдареА рд╣реИ, рддреЛ рдЕрдВрддрд┐рдо рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрдорд╛рдВрдб рд╣реА рд╕реНрдерд┐рддрд┐ рд╣реЛрдЧреАред
рдЗрд░реНрд░реЗрдХреНрд╕рд┐рдЯ рдХреЗ рд▓рд┐рдП, рдПрдПрдирдбреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд░реНрддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдХрднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдПрд░реЗрдХреНрд╕рд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдВрддрд┐рдо рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЗрд╕рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдЬреЛрдбрд╝реЗ рдЬрд╛рдиреЗ рдкрд░ рдЗрд╕рдХреА рдирд┐рдХрд╛рд╕ рд╕реНрдерд┐рддрд┐ рдирдХрд╛рдмрдкреЛрд╢ рдирд╣реАрдВ рд╣реЛрдЧреАред
рдЦрд░рд╛рдм:
condition && extra_stuff
рдЕрдЪреНрдЫрд╛ (рдПрд░реЗрдХреНрд╕рд┐рдЯ рд╡рд┐рдХрд▓реНрдк):
if condition; then extra_stuff fi
рдЕрдЪреНрдЫрд╛ (рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХрд╛ рд╡рд┐рдХрд▓реНрдк):
if condition; then extra_stuff || exit fi exit 0
рдПрд░реЗрдХреНрд╕рд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ
рдЬреИрд╕реЗ тАФ
set -e
ред
рдХрд╛рд░реНрдпрдХреНрд░рдо рд╕реНрддрд░ рд╡рд┐рд▓рдВрдмрд┐рдд рд╕рдлрд╛рдИ
рдпрджрд┐ рдПрд░реЗрдХреНрд╕рд┐рдЯ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдкрд░ рдХрд┐рд╕реА рднреА рдЖрд╡рд╢реНрдпрдХ рд╕рдлрд╛рдИ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
tmpfile="$(mktemp -t myprogram-XXXXXX)" cleanup() { rm -f "$tmpfile" } trap cleanup EXIT
рдкрдХрдбрд╝рд╛ рдЧрдпрд╛: рдХрдорд╛рдВрдб рддрд░реНрдХреЛрдВ рдореЗрдВ рдЗрд░рд░реЗрдХреНрд╕рд┐рдЯ рдХреА рдЕрдирджреЗрдЦреА рдХреА рдЬрд╛рддреА рд╣реИ
рдпрд╣рд╛рдБ рдПрдХ рдмрд╣реБрдд рд╣реА рдХрдард┐рди рд╢рд╛рдЦрд╛ "рдмрдо" рд╣реИ, рдЬрд┐рд╕рдХреА рд╕рдордЭ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдорд╛рдпрдиреЗ рд░рдЦрддреА рдереАред рдореЗрд░реА рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдиреЗ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдХрд╛рд╕ рдорд╢реАрдиреЛрдВ рдкрд░ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдмрд┐рд▓реНрдб рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдкрдиреЗ рдШреБрдЯрдиреЛрдВ рдкрд░ рд░рдЦрд╛:
set -e
рд╕рд╣реА (рдХрд╛рд░реНрдп рдореЗрдВ рдХрдорд╛рдВрдб рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди):
set -e
рдЪреЗрддрд╛рд╡рдиреА:
local
рдФрд░
export
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдорд╛рдВрдб рдХрдорд╛рдВрдб рд░рд╣рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрднреА рднреА рдЧрд▓рдд рд╣реИ:
set -e
рд╢реЗрд▓рдЪреЗрдХ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЗрд╡рд▓
local
рдЬреИрд╕реЗ рд╡рд┐рд╢реЗрд╖ рдЖрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред
local
рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреМрдХрд░реА рд╕реЗ рдШреЛрд╖рдгрд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдВ:
set -e
рдкрдХрдбрд╝рд╛ рдЧрдпрд╛: рдХреЙрд▓рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрд░реЗрдХреНрд╕рд┐рдЯ рдХреА рдЕрдирджреЗрдЦреА рдХреА рдЬрд╛рддреА рд╣реИ
рдХрднреА-рдХрднреА POSIX рднрдпрд╛рдирдХ рд╣реИред Errexit рдХреЛ рдлрд╝рдВрдХреНрд╢рди, рд╕рдореВрд╣ рдЖрджреЗрд╢реЛрдВ рдореЗрдВ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рдм-рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рддрд╛ рд╣реИ рдпрджрд┐ рдХреЙрд▓рд░ рдЗрд╕рдХреА рд╕рдлрд▓рддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рдпреЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдг
Unreachable
рдФрд░
Great success
рдореБрджреНрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдЕрдЬреАрдм рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред
subshell:
( set -e false echo Unreachable ) && echo Great success
рд╕рдореВрд╣ рдЯреАрдо:
{ set -e false echo Unreachable } && echo Great success
рд╕рдорд╛рд░реЛрд╣:
f() { set -e false echo Unreachable } f && echo Great success
рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рдПрд░реЗрдХреНрд╕рд┐рдЯ рдХреЗ рд╕рд╛рде рдмреИрд╢ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЕрдиреБрдкрдпреБрдХреНрдд рд╣реИ: рд╣рд╛рдБ, рдПрд░реЗрдХреНрд╕рд┐рдЯ рдлрд╝рдВрдХреНрд╢рди
рдХреЛ рд▓рдкреЗрдЯрдирд╛
рд╕рдВрднрд╡ рд╣реИ рддрд╛рдХрд┐ рд╡реЗ рдХрд╛рдо рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рд╕рд╣реЗрдЬреЗ рдЧрдП рдкреНрд░рдпрд╛рд╕ (рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдкрд░) рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рд╛рдпрддреНрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╡рд┐рднрд╛рдЬрди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рдЧрд▓рдд рдЙрджреНрдзрд░рдг рдХреЗ рд╕рд╛рде рд╢реЗрд▓ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВ
рдЬрдм рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рд╕реЗ рдХрдорд╛рдВрдб рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЧрд▓рддреА рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рд╢реЗрд▓ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИред рдпрджрд┐ рдпрд╣ рд╢реЗрд▓ рдХрдорд╛рдВрдб рд╕реНрдерд┐рд░ рд╣реИ, рддреЛ рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реИ - рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕ рдХрдорд╛рдВрдб рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдЖрдк
рдПрдХ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЙрддреНрдкрдиреНрди рдХрд░ рд░рд╣реЗ рд╣реИрдВ! рдореИрдВ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рд╣рд░ рдЪреАрдЬ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдмрд╣реБрдд рдердХрд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ:
- рдкреНрд░рддреНрдпреЗрдХ рддрд░реНрдХ рдХреЛ рдЙрджреНрдзреГрдд рдХрд░реЗрдВ;
- рддрд░реНрдХреЛрдВ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рд╡рд░реНрдгреЛрдВ рд╕реЗ рдмрдЪреЗрдВред
рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдЖрдк рдХрд┐рд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдЯреАрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рддреАрди рддрд░реАрдХреЗ рд╣реИрдВред рд╡рд░реАрдпрддрд╛ рдХреНрд░рдо рдореЗрдВ:
рдпреЛрдЬрдирд╛ A: рдмрд┐рдирд╛ рд╢реЗрд▓ рдХреЗ рдХрд░реЗрдВ
рдпрджрд┐ рдпрд╣ рдХреЗрд╡рд▓ рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХрдорд╛рдВрдб рд╣реИ (рдЕрд░реНрдерд╛рдд рдкрд╛рдЗрдк рд▓рд╛рдЗрдирд┐рдВрдЧ рдпрд╛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдЬреИрд╕реЗ рдХреЛрдИ рд╢реЗрд▓ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИ), рддреЛ рдПрдХ рд╕рд░рдгреА рд╡рд┐рдХрд▓реНрдк рдЪреБрдиреЗрдВред
- рдЦрд╝рд░рд╛рдм (python3):
subprocess.check_call('rm -rf ' + path)
- рдЕрдЪреНрдЫрд╛ (python3):
subprocess.check_call(['rm', '-rf', path])
рдЦрд╝рд░рд╛рдм (C ++):
std::string cmd = "rm -rf "; cmd += path; system(cmd);
рдЕрдЪреНрдЫрд╛ (C / POSIX), рдорд╛рдЗрдирд╕ рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ:
char* const args[] = {"rm", "-rf", path, NULL}; pid_t child; posix_spawnp(&child, args[0], NULL, NULL, args, NULL); int status; waitpid(child, &status, 0);
рдкреНрд▓рд╛рди рдмреА: тАЛтАЛрдПрдХ рд╕реНрдерд┐рд░ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдпрджрд┐ рдХреЛрдИ рд╢реЗрд▓ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рддреЛ рджрд▓реАрд▓реЗрдВ рддрд░реНрдХ рджреЗрдВред рдЖрдк рд╕реЛрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЕрдкрдиреА рдЦреБрдж рдХреА рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦрдирд╛ рдмреЛрдЭрд┐рд▓ рдерд╛ рдФрд░ рдЬрдм рддрдХ рдЖрдк рдЗрд╕ рддрд░рд╣ рдХреА рдЯреНрд░рд┐рдХ рдирд╣реАрдВ рджреЗрдЦрддреЗ, рддрдм рддрдХ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░реЗрдВ:
рдЦрд╝рд░рд╛рдм (python3):
subprocess.check_call('docker exec {} bash -ec "printf %s {} > {}"'.format(instance, content, path))
рдЕрдЪреНрдЫрд╛ (python3):
subprocess.check_call(['docker', 'exec', instance, 'bash', '-ec', 'printf %s "$0" > "$1"', content, path])
рдХреНрдпрд╛ рдЖрдк рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдпрд╣ рд╕рд╣реА рд╣реИ, рдкреНрд░рд┐рдВрдЯрдл рдХрдорд╛рдВрдб рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реИред рдзреНрдпрд╛рди рд╕реЗ рдЙрджреНрдзреГрдд рд╕рдВрдЦреНрдпрд╛ рддрд░реНрдХ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдПрдХ рд╕реНрдерд┐рд░ рд╢реИрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдареАрдХ рд╣реИред
рдпреЗ рдЙрджрд╛рд╣рд░рдг рдбреЛрдХрд░ рдореЗрдВ рдЪрд▓рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдпрдерд╛ рд╡реЗ рдЗрддрдиреЗ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдбреЙрдХрд░ рдПрдХ рдРрд╕реЗ рдЖрджреЗрд╢ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рддрд░реНрдХреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреНрдп рдХрдорд╛рдВрдб рдЪрд▓рд╛рддрд╛ рд╣реИред Ssh рдХреЗ рд╡рд┐рдкрд░реАрдд, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдмрд╛рдж рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред
рдЕрдВрддрд┐рдо рд╡рд┐рдХрд▓реНрдк: рд▓рд╛рдЗрди рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ
рдпрджрд┐ рдпрд╣ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ
рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣
ssh
рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП), рддреЛ рдЗрд╕реЗ рдмрд╛рдпрдкрд╛рд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рддрд░реНрдХ рдХреЛ рдЙрджреНрдзреГрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдЗрди рдЙрджреНрдзрд░рдгреЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд┐рд╕реА рднреА рд╡рд░реНрдг рд╕реЗ рдмрдЪрдирд╛ рд╣реЛрдЧрд╛ред рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдПрдХрд▓ рдЙрджреНрдзрд░рдгреЛрдВ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рдкрд╛рд╕ рднрд╛рдЧрдиреЗ рдХреЗ рд╕рдмрд╕реЗ рд╕рд░рд▓ рдирд┐рдпрдо рд╣реИрдВред рдХреЗрд╡рд▓ рдПрдХ рдирд┐рдпрдо:
'
тЖТ
'\"
ред
рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдХрд▓-рдЙрджреНрдзреГрдд рдлрд╝рд╛рдЗрд▓ рдирд╛рдо:
echo 'Don'\''t stop (12" dub mix).mp3'
Ssh рдХрдорд╛рдВрдб рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЯреНрд░рд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ? рдпрд╣ рдЕрд╕рдВрднрд╡ рд╣реИ! рдареАрдХ рд╣реИ, рдпрд╣рд╛рдБ "рдЕрдХреНрд╕рд░ рд╕рд╣реА" рд╕рдорд╛рдзрд╛рди рд╣реИ:
- "рдЕрдХреНрд╕рд░ рд╕рд╣реА" рд╕рдорд╛рдзрд╛рди (python3):
subprocess.check_call(['ssh', 'user@host', "sha1sum '{}'".format(path.replace("'", "'\\''"))])
рд╣рдореЗрдВ рд╕реНрд╡рдпрдВ рд╕рднреА рддрд░реНрдХреЛрдВ рдХреЛ рдПрдХ рддрд╛рд░ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рддрд╛рдХрд┐ Ssh рдЗрд╕реЗ рдЧрд▓рдд рди рдХрд░реЗ: рдпрджрд┐ рдЖрдк рдХрдИ ssh рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЙрджреНрдзрд░рдг рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рд╡рд┐рд╢реНрд╡рд╛рд╕рдШрд╛рддреА рд░реВрдк рд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред
рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рд╣реА рдирд┐рд░реНрдгрдп рджреВрд╕рд░реЗ рдЫреЛрд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рджреВрд░рд╕реНрде рд╢реЗрд▓, рдЬреЛ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрд╕рд▓ рдореЗрдВ, рдпрд╣ рдЖрдкрдХреА рдорд╛рдБ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣ рдорд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП "рдЕрдХреНрд╕рд░ рд╕рд╣реА" рд╣реИ рдХрд┐ рджреВрд░рд╕реНрде рд╢реЗрд▓ рдмреИрд╢ рд╣реИ рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рдкреЙрд╕рд┐рдХреНрд╕-рд╕рдВрдЧрдд рд╢реЗрд▓ рд╣реИ, рд▓реЗрдХрд┐рди
рдордЫрд▓реА рдЗрд╕ рдЪрд░рдг рдХреЗ рд▓рд┐рдП рдЕрд╕рдВрдЧрдд рд╣реИ ред