15

これは私のコードです:

if ARGV[0] == false
    puts "Usage: ./script.rb argument"
    exit
end
print "Yey we got an argument: " ARGV[0]

しかし、ARGV [0]が指定されているかどうかをコードでチェックすることはできません。どうすればよいですか?

4

7 に答える 7

32

それがそうであるempty?かどうかを確認してください(またはその長さを確認してください):

if ARGV.empty?
  puts ...
  exit
end

OptionParserなどのRubyコマンドライン引数パーサーのいずれかを使用することを検討してください。

于 2013-01-30T17:17:10.630 に答える
7

位置引数を処理する最も簡単な方法(gemを使用して処理する以外)は、一度に1つずつシフトオフすることです

arg1 = ARGV.shift
arg2 = ARGV.shift

欠落している引数はnilになります。これを利用して、arg2にデフォルト値を与えましょう。

arg1 = ARGV.shift
arg2 = ARGV.shift || 'default value goes here'

必要な引数をチェックするのは簡単です。

raise "missing argument" unless arg1

提供された引数が多すぎるかどうかも簡単に確認できます。

raise "too many arguments" unless ARGV.empty?
于 2013-01-30T17:22:54.473 に答える
4

良い解決策がすでに与えられていることはわかっていますが、あなたの例がうまくいかなかった本当の理由については誰も言及していません。

サンプルコードの問題は、引数が指定されていない場合、ARGV[0]が返されnilnil == falsefalseになることです。nil「偽」ですが、偽とは等しくありません。あなたができることは次のとおりです。

unless ARGV[0]
  puts "Usage: ..."
  exit 1
end

このステートメントは、実際のとの平等ではなく、偽りに依存しているため、これはうまくいきましたfalse

ただし、このコードは使用しないでください。実際の意図を述べると、はるかに明確になります。つまり、(最初の引数が偽であるかどうかではなく)引数があるかどうかを知りたいということです。したがって、他の人が提案したコードを使用してください。

if ARGV.empty?
  puts "Usage..."
  exit 1
end
于 2013-11-15T14:11:16.780 に答える
1

ARGV [0](またはそれ以上の引数)が指定されているかどうかを確認するには、次のようにします。

puts 'Usage: ...' if ARGV.length == 0

ARGV.emptyを使用することもできますか?(@DaveNewtonの回答)

于 2015-08-10T20:07:57.223 に答える
0

の長さを確認できますARGV。要素がゼロの場合、ARGV[0]指定されませんでした。

于 2013-01-30T17:17:22.323 に答える
0

私はこれを行い、仕事をします:

url = ARGV[0] 

if url.nil?
  puts "The shell script needs the arguments."
  exit
end
于 2018-09-28T16:07:52.190 に答える
-2

これが私がすることです:

a = 'defaultvalue' if (a = ARGV.shift).nil?

他の誰かがこれを提案しました:

a = ARGV.shift || 'defaultvalue'

これは間違っています。誤った値がdefaultvalue割り当てられるためです。例:

args=[false]; a=args.shift||true; # a has final value true when it should be false
于 2014-01-24T15:22:47.417 に答える