불행히도 Ruby는 AWK와 같은 전달 메커니즘을 지원하지 않습니다.
> awk -v a=1 'BEGIN {print a}'
> 1
즉, 명명 된 값을 스크립트에 직접 전달할 수 없습니다.
cmd 옵션을 사용하면 도움이 될 수 있습니다.
> ruby script.rb val_0 val_1 val_2
# script.rb
puts ARGV[0] # => val_0
puts ARGV[1] # => val_1
puts ARGV[2] # => val_2
Ruby는 모든 cmd 인수를 ARGV
배열 에 저장 하며 스크립트 이름 자체는 $PROGRAM_NAME
변수를 사용하여 캡처 할 수 있습니다 .
명백한 단점은 값의 순서에 의존한다는 것입니다.
부울 스위치 만 필요한 경우 -s
Ruby 인터프리터 옵션 을 사용하십시오 .
> ruby -s -e 'puts "So do I!" if $agreed' -- -agreed
> So do I!
--
스위치에 유의하십시오 . 그렇지 않으면 Ruby가 존재하지 않는 옵션에 대해 불평 -agreed
하므로 cmd 호출에 대한 스위치로 전달하십시오. 다음과 같은 경우에는 필요하지 않습니다.
> ruby -s script_with_switches.rb -agreed
> So do I!
단점은 전역 변수를 망쳐 놓고 논리적 참 / 거짓 값만 갖는 것입니다.
환경 변수에서 값에 액세스 할 수 있습니다.
> FIRST_NAME='Andy Warhol' ruby -e 'puts ENV["FIRST_NAME"]'
> Andy Warhol
단점은 여기에 있으며 스크립트 호출 전에 모든 변수를 설정하거나 (루비 프로세스에만 해당) 내 보내야합니다 (BASH와 같은 쉘).
> export FIRST_NAME='Andy Warhol'
> ruby -e 'puts ENV["FIRST_NAME"]'
후자의 경우 동일한 셸 세션의 모든 사용자와 모든 하위 프로세스에서 데이터를 읽을 수 있으며 이는 심각한 보안 문제가 될 수 있습니다.
적어도 getoptlong 및 optparse를 사용하여 옵션 파서를 구현할 수 있습니다 .
행복한 해킹!