рдХреИрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд░рдо

рдХреНрдпреЛрдВ рдорд╛рд░рдирд╛?


рдмреИрд╢ рдореЗрдВ рд╕рд░рдгрд┐рдпрд╛рдБ рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдореЛрдб рд╣реИрдВред рдЬрдм рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмреИрд╢ рд▓рдЧрднрдЧ рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдбрд┐рдВрдЧ рдкреНрд░рдерд╛рдУрдВ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрддрд╛ рд╣реИред

рдордЫрд▓реА рдореЗрдВ рдЧрд▓рддреА рдХрд░рдирд╛ рдХрдард┐рди рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд┐рдд рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдордЫрд▓реА рдореЗрдВ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдФрд░ рдлрд┐рд░ рдордЫрд▓реА рд╕реЗ рдмреИрд╢ рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИред

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


рдпрд╣ рдорд╛рд░реНрдЧрджрд░реНрд╢рд┐рдХрд╛ рд╢реЗрд▓рд╣рд╛рд░реНрдбрди рдХреЗ рд╕рд╛рде рд╣реИ, рд▓реЗрдХрд┐рди рд▓реЗрдЦрдХ рд╢реЗрд▓рдЪреЗрдХ рдХреА рднреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╢реЗрд▓рд╣рд╛рд░реНрдбрди рдирд┐рдпрдо рд╢реЗрд▓рдЪреЗрдХ рд╕реЗ рд╡рд┐рдЪрд▓рди рди рдХрд░реЗрдВред

рдмреИрд╢ рдПрдХ рднрд╛рд╖рд╛ рдирд╣реАрдВ рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд╣реА рддрд░реАрдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИ ред рдпрджрд┐ рдЖрдк рдмреИрд╢ рд╕реБрд░рдХреНрд╖рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкрд░реАрдХреНрд╖рд╛ рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ 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") 

рдХрд╣рд╛рдБ рдПрдХ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП


рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ:

 #!/usr/bin/env bash if test "$BASH" = "" || "$BASH" -uc "a=();true \"\${a[@]}\"" 2>/dev/null; then # Bash 4.4, Zsh set -euo pipefail else # Bash 4.3 and older chokes on empty arrays with set -u. set -eo pipefail fi shopt -s nullglob globstar 

рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

  • рдорд╛рдорд▓рд╛:
    • рдкреЛрд░реНрдЯреЗрдмрд┐рд▓рд┐рдЯреА рдХреЗ рдореБрджреНрджреЗ: 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 # Fail if nproc is not installed make -j"$(nproc)" 

рд╕рд╣реА (рдХрд╛рд░реНрдп рдореЗрдВ рдХрдорд╛рдВрдб рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди):

 set -e # Fail if nproc is not installed jobs="$(nproc)" make -j"$jobs" 

рдЪреЗрддрд╛рд╡рдиреА: local рдФрд░ export рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрдорд╛рдВрдб рдХрдорд╛рдВрдб рд░рд╣рддреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрднреА рднреА рдЧрд▓рдд рд╣реИ:

 set -e # Fail if nproc is not installed local jobs="$(nproc)" make -j"$jobs" 

рд╢реЗрд▓рдЪреЗрдХ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЗрд╡рд▓ local рдЬреИрд╕реЗ рд╡рд┐рд╢реЗрд╖ рдЖрджреЗрд╢реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИред

local рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдиреМрдХрд░реА рд╕реЗ рдШреЛрд╖рдгрд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдВ:

 set -e # Fail if nproc is not installed local jobs jobs="$(nproc)" make -j"$jobs" 

рдкрдХрдбрд╝рд╛ рдЧрдпрд╛: рдХреЙрд▓рд░ рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрд░реЗрдХреНрд╕рд┐рдЯ рдХреА рдЕрдирджреЗрдЦреА рдХреА рдЬрд╛рддреА рд╣реИ


рдХрднреА-рдХрднреА 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 рддрд░реНрдХреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЙрджреНрдзрд░рдг рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рд╡рд┐рд╢реНрд╡рд╛рд╕рдШрд╛рддреА рд░реВрдк рд╕реЗ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛ред

рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рд╣реА рдирд┐рд░реНрдгрдп рджреВрд╕рд░реЗ рдЫреЛрд░ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛рдУрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН рджреВрд░рд╕реНрде рд╢реЗрд▓, рдЬреЛ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрд╕рд▓ рдореЗрдВ, рдпрд╣ рдЖрдкрдХреА рдорд╛рдБ рднреА рд╣реЛ рд╕рдХрддреА рд╣реИред рдпрд╣ рдорд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП "рдЕрдХреНрд╕рд░ рд╕рд╣реА" рд╣реИ рдХрд┐ рджреВрд░рд╕реНрде рд╢реЗрд▓ рдмреИрд╢ рд╣реИ рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рдкреЙрд╕рд┐рдХреНрд╕-рд╕рдВрдЧрдд рд╢реЗрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдордЫрд▓реА рдЗрд╕ рдЪрд░рдг рдХреЗ рд▓рд┐рдП рдЕрд╕рдВрдЧрдд рд╣реИ ред

Source: https://habr.com/ru/post/hi413117/


All Articles