Да просто текстовые параметры, которая программа видит и что-то делает в зависимости от того, какие параметры были переданы.
К примеру, консольной программе нужно на вход принять два имени файла - то, откуда читать и то, куда писать.
Разработчик может сказать, мол, сначала напишите имя входного файла, а потом имя выходного. И вам придется вызывать программу следующим образом:
software.exe infile.txt outfile.txt
А другой разработчик возьмет и подумает - а может сделать чтоб можно было параметры подавать в любом порядке? Вот тут и приходят на помощь "ключи". Например, разработчик будет "парсить" входные параметры консольной программы и если увидит параметр "-i", то следующий за ним будет распарсен как имя входного файла. Аналогично, по параметру "-o" программа поймёт, что дальше следует имя выходного файла. Вот эти вспомогательные параметры и зовутся ключами. По договоренности, обычно используют понятные однобуквенные сокращения с одной черточкой перед ним (-i как input, -o как output) или многобуквенные сокращения с двумя черточками (--input или --output).
И теперь можно вызывать программу как
software.exe -i infile.txt -o outfile.txt
так и
software.exe -o outfile.txt -i infile.txt
Для двух параметров эффект не очень заметен, но представьте, что их десяток, и часть из них не являются обязательными. Там уже без ключей тяжело запомнить что в каком порядке подавать