Automatic command line parsing
No need to manually parse command line options for your scripts, bds does it for you.
bds automatically parse any command line line argument that starts with "-" and assigns the value to the corresponding variable global variable (if the variable exists).
Example (test_20.bds):
#!/usr/bin/env bds
in := "in.txt"
print("In file is '$in'\n")
If we run this, we get
$ ./test_20.bds
In file is 'in.txt'
Now we pass a command line argument -in another_file.txt, and bds automatically parses that command line option replacing the value of variable in
$ ./test_20.bds -in another_file.txt
In file is 'another_file.txt'
This feature also works for other data types (int, real, bool or lists).
Flags
In case of bool if the option is present, the variable is set to true.
File test_21.bds
#!/usr/bin/env bds
bool flag
print("Variable flag is $flag\n")
$ ./test_21.bds
Variable flag is false
$ ./test_21.bds -flag
Variable flag is true
Or you can specify the value (true or false which is useful to set to false a bool that is by default true:
File test_21b.bds
#!/usr/bin/env bds
flagOn := true
flagOff := false
print("flagOn = $flagOn\nflagOff = $flagOff\n")
So in this example we can reverse the defaults by running this (note that we can use -flagOff instead of -flagOff true):
$ ./test_21b.bds -flagOn false -flagOff true
flagOn = false
flagOff = true
Note that we can use -flagOff instead of -flagOff true.
Lists
You can also apply this to a list of strings.
In this case, all command line arguments following the -listName will be included in the list (up to the next argument starting with '-').
E.g.: Note that list in is populated using in1.txt in2.txt in3.txt and out is set to zzz.txt
File test_22.bds
#!/usr/bin/env bds
in := ["in.txt"]
out := "out.txt"
ok := false
print("In : $in\n")
print("Out: $out\n")
print("OK : $ok\n")
$ ./test_22.bds -ok -in in1.txt in2.txt in3.txt -out zzz.txt
In : [in1.txt, in2.txt, in3.txt]
Out: zzz.txt
OK : true