Fish-shell: {x,y,z} рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрдЪрд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 30 рджрд┐рд╕ре░ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: fish-shell/fish-shell

рдордЫрд▓реА рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ, рдПрдХ рдирд┐рдпрдо рдХреЗ рд░реВрдк рдореЗрдВ, рдордЫрд▓реА рдЖрджреЗрд╢реЛрдВ рдореЗрдВ рдЗрдВрдЬреЗрдХреНрд╢рди рд▓рдЧрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрдЪ рдирд┐рдХрд▓реЗ рд╣реИрдВ:

mqudsi@freebsd> echo hello > hello\ world.txt
mqudsi@freebsd> file (echo hello world.txt)
hello world.txt: ASCII text

рд╣рд╛рд▓рд╛рдВрдХрд┐, рдмреНрд░реЗрд╕рд┐рдЬрд╝ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрдЪ рдирд╣реАрдВ рдкрд╛рдпрд╛ рд╣реИ, _and_ рдЗрд╕реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЪрдиреЗ рдХрд╛ рдХреЛрдИ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЙрджреНрдзрд░рдг рдкреЗрд╢ рдХрд░рдиреЗ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИ:

mqudsi@freebsd> echo -n hello\ {1,2,3}.txt\n
hello 1.txt
 hello 2.txt
 hello 3.txt

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдмрд╛рдж, echo рдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реНрдХ hello рдФрд░ #.txt рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рдордиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрдЧрд╣ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рддрд░реНрдХреЛрдВ рдХреЛ рдЙрджреНрдзрд░рдгреЛрдВ рдореЗрдВ рд▓рдкреЗрдЯрдиреЗ рд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реЛрддрд╛ рд╣реИ:

mqudsi@freebsd> echo -n "hello\ {1,2,3}.txt\n"
hello\ {1,2,3}.txt\n

рдореВрд▓ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдмрдЪ рдирд┐рдХрд▓реЗ рдЙрджреНрдзрд░рдгреЛрдВ рдХреЛ рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рдХреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп (рдЕрдиреБрдорд╛рди рдХреЗ рддрд╣рдд рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рдж рдФрд░ рдЗрдВрдЬреЗрдХреНрд╢рди рд╕реЗ рдкрд╣рд▓реЗ рдмрдЪ рдирд╣реАрдВ рдЬрд╛ рд░рд╣реА рд╣реИ) рд╡рд╛рдВрдЫрд┐рдд рдкрд░рд┐рдгрд╛рдо рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрджреНрдзрд░рдг рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрдЪ рдирд┐рдХрд▓реЗ рд╣реИрдВ:

mqudsi@freebsd> echo -n \"hello\ {1,2,3}.txt\n\"                                                                                                     "hello 1.txt                                                                                                                                                       " "hello 2.txt                                                                                                                                                     " "hello 3.txt                                                                                                                                                     
"

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддрд░реНрдХ рд╡рд┐рднрд╛рдЬрди рдЪрд░рдг рдХреЗ рдмрд╛рдж рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛ рд░рд╣рд╛ рд╣реИред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

echo рдХреЛ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реНрдХ рд╣реИрд▓реЛ рдФрд░ #.txt рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╢рдмреНрджреЛрдВ рдХреЗ рд╕рд╛рдордиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрдЧрд╣ рд╣реЛ рдЬрд╛рддреА рд╣реИред

рдореИрдВ рдЙрд╕ рдирд┐рджрд╛рди рд╕реЗ рд╕рд╣рдордд рдирд╣реАрдВ рд╣реВрдВред echo рдХреЛ 3 рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рдкреНрд░рддреНрдпреЗрдХ \n рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ), рдЬреЛ echo рдмреАрдЪ рдореЗрдВ рдПрдХ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рдХрд░реНрддрд╡реНрдпрдкреВрд░реНрд╡рдХ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрд╣рд╛рдВ рдХреЛрдИ рдмрдЧ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИред

рддрд░реНрдХреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реВрдВ:

~> printf '┬л%s┬╗' hei\ {1,2,3}.txt\n
┬лhei 1.txt
┬╗┬лhei 2.txt
┬╗┬лhei 3.txt
┬╗тПО

рддрд░реНрдХреЛрдВ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реВрдВ:

рдореИрдВ string escape рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдЕрд░реНрдерд╛рдд

> string escape -- hello\ {1,2,3}.txt\n
hello\ 1.txt\n
hello\ 2.txt\n
hello\ 3.txt\n

рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд╣ рдорд┐рд▓рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдореИрдВ рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реВрдВред рдЖрдкрдХреЛ "1" рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рддрд░реНрдХ рдорд┐рд▓рддрд╛ рд╣реИ, рдлрд┐рд░ "2" рдХреЗ рд╕рд╛рде рдФрд░ рдлрд┐рд░ "3" рдХреЗ рд╕рд╛рдеред рдкреВрд░рд╛ рддрд░реНрдХ рд╕рд┐рд░реНрдл рдПрдХ рдирдИ рд▓рд╛рдЗрди рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред

@mqudsi : рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рдЖрдкрдХреЛ рдпрд╣рд╛рдВ рдлреЗрдВрдХ рд░рд╣рд╛ рд╣реИ рд╡рд╣ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ:

  • рд╣рдо рдХреЗрд╡рд▓ рдиреНрдпреВрд▓рд╛рдЗрди рдкрд░ рдХрдорд╛рдВрдб рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди ( (command) ) рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ \n рдХрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдЕрд░реНрде рдирд╣реАрдВ рд╣реИ, рдЗрд╕реЗ рдПрдХ рдиреНрдпреВрд▓рд╛рдЗрди рдХреИрд░реЗрдХреНрдЯрд░ рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ "рдПрдХ рдЪрд░рд┐рддреНрд░" рд╣реИ, рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдмрд╛рдХреА рдХрд╛ рд╕рдВрдмрдВрдз рд╣реИред рд╣рдореЗрдВ рдЪрд░рд┐рддреНрд░ рдХреЛ _escape_ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдХреЗрд╡рд▓ рдмрдВрдЯрд╡рд╛рд░реЗ рдХреЛ рдирд╣реАрдВ рдЪрд▓рд╛рддреЗ рд╣реИрдВред

рдпрд╛ рдореЗрдВ file (echo hello world.txt) , "hello world.txt" _is not_ рдмрдЪ рдирд┐рдХрд▓реЗ hello\ world.txt , рдпрд╣ рд╕рд┐рд░реНрдл рд╡рд┐рднрд╛рдЬрд┐рдд рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдИ рдирдИ рд▓рд╛рдЗрди рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ hello\nworld.txt рдирд╛рдордХ рдлрд╝рд╛рдЗрд▓ рд╣реИ, рддреЛ рдЗрд╕рдореЗрдВ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рдмреИрд╢ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛрдВрдЧреАред

  • echo рдЕрдкрдиреЗ рддрд░реНрдХреЛрдВ рдХреЗ рдмреАрдЪ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рд╕рдореНрдорд┐рд▓рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдпрджрд┐ "-s" рдирд╣реАрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЕрдЬреАрдм рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рд╣реЛ рд░рд╣рд╛ рд╣реИ - рдХреНрдпреЛрдВрдХрд┐ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди рдиреНрдпреВрд▓рд╛рдЗрди рдХреЗ рдареАрдХ рдмрд╛рдж рд╣реЛрддреЗ рд╣реИрдВред

рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рдЖрдЙрдЯрдкреБрдЯ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

hello 1.txt
hello 2.txt
hello 3.txt

echo -s рдпрд╛ printf '%s\n' hello\ {1,2,3}.txt ред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЧрд▓рддрдлрд╣рдореА рд╣реИред рдХреНрдпрд╛ рдореИрдВ рд╕рд╣реА рд╣реВрдБ?

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ рджреЛрд╕реНрддреЛрдВ! рдореИрдВ рдПрдХ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдиреНрдпреВрдирддрдо рд░реЗрдкреЛ рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдХреБрдЫ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕реЗ рднреНрд░рдорд┐рдд рдерд╛ред рдореБрдЭреЗ рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд▓рдд рд▓рдЧрд╛, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдореИрдВрдиреЗ рдЗрд╕реЗ parallel рдпрд╛ xargs рд╕рд╛рде 1 рдХреА рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдХрд┐рдпрд╛, рдпрд╛рдиреА рдореИрдВрдиреЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдХрд┐ echo {1,2,3} рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ 3 рддрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред 1 рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдЖрджреЗрд╢ рдФрд░ 3 рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде 1 рдЖрджреЗрд╢ рдирд╣реАрдВред

рдореБрдЭреЗ рд╕рд╛рдл - рд╕рд╛рдл рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

yqiang picture yqiang  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mqudsi picture mqudsi  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

rwz picture rwz  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

frankyan picture frankyan  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zx8 picture zx8  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ