Fish-shell: eval $ argv๋Š” ์ธ์ˆ˜๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 01์›” 07์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: fish-shell/fish-shell

  • [x] Fish 2.4.0์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํ™•์ธํ•˜์…จ์Šต๋‹ˆ๊นŒ?
  • [x] ํƒ€์‚ฌ ์‚ฌ์šฉ์ž ์ง€์ •์—†์ด ์ƒ์„ ์„ ์‚ฌ์šฉํ•ด ๋ณด์…จ์Šต๋‹ˆ๊นŒ ( sh -c 'env HOME=$(mktemp -d) fish' ) ?

์„ค์น˜๋œ ๋ฌผ๊ณ ๊ธฐ ๋ฒ„์ „ ( fish --version ) : 2.4.0

์‚ฌ์šฉ OS / ๋‹จ๋ง๊ธฐ : OSX 10.12.2 (16C67) / iTerm2 Build 3.0.13

์ธ์ˆ˜ ๋งŒ ์ถœ๋ ฅํ•˜๋Š” ๊ฐ„๋‹จํ•œ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ๋‹ค๊ณ  ๊ฐ€์ • ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#!/usr/bin/env ruby
p ARGV

์‹คํ–‰์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

> ./myscript.rb foo 'hello world'
["foo", "hello world"]

"hello world"๊ฐ€ ํ•˜๋‚˜์˜ ์ธ์ˆ˜๋กœ ๊ทธ๋ฃนํ™”๋˜๋Š” ๊ฒƒ๊ณผ "hello"๋ฐ "world"๊ฐ€ ๋ณ„๋„์˜ ์ธ์ˆ˜ ์ธ ๋ฐฉ๋ฒ•์— ์ฃผ๋ชฉํ•˜์‹ญ์‹œ์˜ค.

์ด์ œ ์ผ๋ถ€ ENV ๋ณ€์ˆ˜๋ฅผ ์„ค์ •ํ•˜์—ฌ ์ž„์˜์˜ ๋ฌผ๊ณ ๊ธฐ ๋ช…๋ น (๋ณ„์นญ ํฌํ•จ)์„ ์‹คํ–‰ํ•  ์ˆ˜์žˆ๋Š” ๋ฌผ๊ณ ๊ธฐ ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๊ทธ๋Ÿฌํ•œ ๊ธฐ๋Šฅ์˜ ์ฒซ ๋ฒˆ์งธ ์‹œ๋„์ž…๋‹ˆ๋‹ค.

function debug
  set -xg DEBUG 1
  eval $argv
  set -e DEBUG
end

์ด ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์œ„์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ผ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

> debug ./myscript.rb foo 'hello world'
["foo", "hello", "world"]

๋‹จ์ผ "hello world"์ธ์ˆ˜๊ฐ€ "hello"๋ฐ "world"๋กœ ๋ฐ”๋€Œ ์—ˆ์Œ์„ ์ฃผ๋ชฉํ•˜์‹ญ์‹œ์˜ค. ์ด๊ฒƒ์€ ์ œ๊ฐ€ ์›ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค.

๋˜ํ•œ ๋‹ค์Œ ์ ‘๊ทผ ๋ฐฉ์‹์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

env DEBUG=1 fish -c "$argv"

๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋‚ณ์•˜์Šต๋‹ˆ๋‹ค.

ํ•จ์ˆ˜์˜ $argv "hello world"๊ทธ๋ฃน์„ ์œ ์ง€ํ•˜๋„๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

question

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

ํ˜„์žฌ string escape , ์ฆ‰ eval (string escape -- $argv) ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

์ด๊ฒƒ์€ ํŠนํžˆ "$ argv"๊ฐ€ ์•„๋‹ˆ๋ผ eval ์˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

eval ๋Š” ์ธ์ˆ˜๊ฐ€ ๋ช…๋ น ์ค„์— ์ œ๊ณต๋œ ๊ฒƒ์ฒ˜๋Ÿผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋ฉฐ ์ธ์ˆ˜๊ฐ€ ๋ถ„ํ• ๋˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ๋Š” ์‹ ๊ฒฝ ์“ฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด์ „์— ์ด๊ฒƒ์— ๋Œ€ํ•ด ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์ง€๋งŒ ์ง€๊ธˆ์€ ํ‰๊ฐ€๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†์œผ๋ฉฐ ๋‹ค๋ฅธ ๊ฒƒ์„ ๋” ๊นŒ๋‹ค๋กœ์šธ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ํ•ฉ์˜๊ฐ€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๊ฐ€ ์•Œ๊ณ  ์žํ•˜๋Š” ๊ฒƒ์€ # 154์— ์žˆ์Šต๋‹ˆ๋‹ค- command ๋งŒ๋“ค๊ณ  ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์•„๋“ค์ด์‹ญ์‹œ์˜ค.

์ฆ‰, command $argv ์ถ”๊ฐ€ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์˜ˆ์ƒ๋Œ€๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ string escape , ์ฆ‰ eval (string escape -- $argv) ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์‚ฌ. (string escape -- $argv) ์ผํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰