2017-02-22 21 views
5

ruby​​ -aコマンドラインスイッチとは何ですか? <a href="https://linux.die.net/man/1/ruby" rel="noreferrer">man</a>ページから

-a  Turns on auto-split mode when used with -n or -p. 
     In auto-split mode, Ruby executes 
       $F = $_.split 
     at beginning of each loop. 

は、いくつかの質問が頭に浮かぶ:

  • -a-nまたは-pなしで使用されたときにどうなりますか?
  • $Fとは何ですか?
  • ループの終わりにはどうなりますか?
  • splitに選択されている文字を制御するにはどうすればよいですか?
  • -aはどのように使用されますか?別のreference pageから

$F  The variable that receives the output from split when -a is specified. 
     This variable is set if the -a command-line option is specified 
     along with the -p or -n option. 

私はまだ-aスイッチが何であるかわかりません。説明を感謝しますが、いくつかの例を高く評価します。私が試した

いくつかの点:

$ echo foo_bar_bar | ruby -ae 
ruby: no code specified for -e (RuntimeError) 
$ echo foo_bar_bar | ruby -ap 
$ echo foo_bar_bar | ruby -ap '$_' 
ruby: No such file or directory -- $_ (LoadError) 

答えて

4

自動分割モードが-aスイッチで有効になっています。デフォルトではawkのような種類のテキスト処理が可能です。オートスプリットモードでは、ルビーは、一度に引数またはstdin 1行として指定されたファイルを読み取り、各ラインの

  1. が自動的に(フィールドセパレータに応じてフィールドに、ライン、$_を分割-Fフラグで指定)
  2. $F
  3. という名前の変数に結果を割り当てます。コマンドラインからアクションを実行します。

すべての行が処理された後、プログラムはEND blockを終了または実行します。 exampleについては、この回答を参照してください。

オートスプリットモードはrecords多く(record separatorが変更されない限り、recordsがラインである)と、各ラインで区切られたfieldsの数を持っている表形式のテキストファイルで作業する場合に便利です。例えば は、コンテンツとfileを考える:この場合

$ ruby -F: -a -n -e 'puts $F[2]' file 
TGH 
YTH 
GHKIO 

:にフィールドセパレータを設定-F::その後

ADG:YUF:TGH 
UIY:POG:YTH 
GHJUR:HJKL:GHKIO 

ruby -F: -a -n -e 'puts $F[2]' fileは、ライン毎に3番目のフィールドを印刷します。 $Fは、レコード($_)が分割された後にフィールドが存続する配列です。 -e以降のアクションは、分割後の行ごとに実行されます。

ruby cliスイッチは、perlと非常によく似ています。 perl cliは、この機能をより便利にします。perldoc perlrunを参照してください。例えば、-a-n(または-p)なしでは役に立たないので、perlの中で-Fは暗黙的に-nを有効にします。 rubyではそうではなく、すべてのスイッチを明示的に渡す必要があります。 この種の処理で行うことができる素晴らしいことの例は、awk one linersを探してください。

はまた、ruby CLIはcommand-line optionsを渡すためにUNIXの規則に従います。

伝統的に、UNIXのコマンドラインオプションは、一つ以上の小文字に続いて、ダッシュで構成されています。だから、-a-nswitches-eflagは、同じ結果を達成するために組み合わせることができ

:これは面白いです場合

$ ruby -F: -ane 'puts $F[2]' file 
TGH 
YTH 
GHKIO 

を、いくつかの他のruby one liners.

をチェックしてください
関連する問題