Как работать с аргументами командной строки в J

В режиме консоли J, если я набираю ARGV, я получаю полный путь к jqt.exe. Но когда я пытаюсь передать некоторые строки в файл сценария J, я получаю «синтаксическую ошибку» или «ошибку домена». Как работает передача и извлечение или отображение аргументов?


j
person user3234709    schedule 02.09.2020    source источник
comment
a=:ARGV echo a у меня не работает   -  person user3234709    schedule 02.09.2020
comment
Если F является файлом -> F 'hello' 'world' показывает синтаксическую ошибку   -  person user3234709    schedule 02.09.2020


Ответы (2)



Взаимодействие со скриптом, который просто выводит свои аргументы:

$ cat args.ijs
#! /usr/bin/env j
exit echo each ARGV
$ ./args.ijs
j
./args.ijs
$ ./args.ijs 1 2 3
j
./args.ijs
1
2
3
$ ./args.ijs '1 2' 3
j
./args.ijs
1 2
3

ARGV — это список упакованных аргументов скрипта. Он работает как любой список упакованных литералов, и если вы ошибаетесь в предметной области, это происходит из-за какого-то глагола в вашем скрипте, которому заданы аргументы, для обработки которых он не определен. Если вы получаете синтаксическую ошибку, это потому, что в вашем скрипте есть что-то с неправильным синтаксисом. Это не имеет отношения к ARGV как таковому.

Возможно, вы ожидаете, что числовые аргументы будут числами? Аргументы всегда передаются в виде строк. Вот немного более сложный скрипт с использованием, который печатает сумму факториалов своих аргументов:

#! /usr/bin/env j
sumfact =: [: +/ [: ! x:
3 : 0''
  if. (#ARGV) > 2 do.
    echo sumfact > 0&". each 2}.ARGV
    exit 0
  else.
    echo 'usage: ', (1{::ARGV), ' <n1> [<n2> ... <nn>]'
    exit 1
  end.
)

Используемый:

$ ./sumfact.ijs
usage: ./sumfact.ijs <n1> [<n2> ... <nn>]
$ ./sumfact.ijs 0
1
$ ./sumfact.ijs 5
120
$ ./sumfact.ijs 5 5 5
360
$ ./sumfact.ijs 100
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

Текст после #! не важен; Я использую /usr/bin/env j, потому что у меня есть j в моем пути, который является обычным bin/jconsole установки J.

person Julian Fondren    schedule 02.09.2020
comment
все еще немного нечетко .. Как мне назвать сценарий? Мой скрипт находится в папке дополнений. Путь -. C:\Users\...J64-807\addons\argdemo.ijs 1!:1 для чтения файла, верно? или я должен использовать 0!: 1 не уверен. 1!:1 ‹ F '1' '2' '3' или просто 1 2 3 или что-то еще, получая ошибку значения или синтаксическую ошибку, что бы я ни пытался. - person user3234709; 03.09.2020
comment
Привет боб! Получение строки, записанной в мой файл, следуя вашему примеру. не совсем то, что я после, но хорошо. - person user3234709; 03.09.2020