Проблема чаще всего связана с параметрами, требующими следующего аргумента. Давайте посмотрим на tar в качестве примера. -f
требует имя файла, поэтому за ним должно следовать имя файла.
Общая форма разбора аргументов в псевдокоде может помочь проиллюстрировать это :Помните, что аргументы передаются команде, так как векторный файл(-cvf
будет разбит наargv[0]=c argv[1]=v argv[2]=f argv[3]=file
)
While $argv is not empty
do
case $argv[0] in # argv[0] is pointer to leftmost, or first, arg
c) # single element argument
set internal variable create_mode=true
shift # remove argv[0], shifting all indexes down by 1, so argv[0] now points to former argv[1]
f) # A double element argument
set internal variable use_file=true
shift
set internal variable file_name=$argv[0] # We did a shift, so now argv[0] points to the argument following 'f'
shift
v) # Another single element argument
set internal variable verbose=true
shift
# and so on, there is a case for each possible argument, and shifts according to the number of elements in each argument
done
Цикл продолжит обработку каждого аргумента в argv, пока argv (вектор аргументов )не станет пустым.
Как видите, если аргумент состоит из нескольких частей, из-за реализации обработки аргументов все его части должны следовать сразу за аргументом.
RCS действительно создает файлы с суффиксом ,v
:
$ mkdir RCS
$ echo hello > hello.txt
$ ci hello.txt
RCS/hello.txt,v <-- hello.txt
enter description, terminated with single '.' or end of file:
NOTE: This is NOT the log message!
>> test file
>>
initial revision: 1.1
done
$ ls RCS
hello.txt,v
и они не выглядят точно так же, как исходный файл, так что действительно может быть разумно признать их чем-то другим.
$ cat RCS/hello.txt,v
head 1.1;
access;
symbols;
locks; strict;
comment @# @;
1.1
date 2021.08.28.14.44.57; author ilkkachu; state Exp;
branches;
next ;
desc
@test file
@
1.1
log
@Initial revision
@
text
@hello
@
Похоже, он также способен обрабатывать по крайней мере некоторые двоичные данные, хотя делает это на основе строки -.
Почему они распознаются именно как аудиофайлы, я не знаю.