Почему я не могу получить доступ к файлу с именем `-` при цитировании? [дубликат]

Вы ищете команду написать ? Эта команда позволяет вам отправить сообщение данному пользователю, которое затем будет распечатано на его терминале / консоли. При желании вы можете указать tty, на который будет отправлено сообщение.

2
12.02.2019, 22:10
3 ответа

Оболочка удаляет все кавычки до того, как catих увидит. Таким образом, cat -, cat "-"и cat '-'передаются как массив ['cat', '-']после токенизации пробелов,расширение подстановочных знаков и удаление кавычек оболочкой.

16
27.01.2020, 21:49

Кавычки используются оболочкой и не передаются команде:

напр.

cat "hello world" #this passes the single token `hello world`, to `cat`, as argument 1. However the quotes are not passed.
cat "-" # this passes the single token `-`, to `cat`, as argument 1. The same as if no quotes had been used.
6
27.01.2020, 21:49

GNU catзакодирован для сравнения заданного имени файла со строкой " -" перед попыткой открыть его как файл:

  if (STREQ (infile, "-"))
    {
      have_read_stdin = true;
      input_desc = STDIN_FILENO;
      if (file_open_mode & O_BINARY)
        xset_binary_mode (STDIN_FILENO, O_BINARY);
    }
  else
    {
      input_desc = open (infile, file_open_mode);
      if (input_desc < 0)
        {
          error (0, errno, "%s", quotef (infile));
          ok = false;
          continue;
        }
    }

Итак, если у вас есть файл с именем -, вам нужно обойти эту логику, указав catпуть и имя .

Кавычки защищают значение от разделения пробелами и, если оно заключено в одинарные кавычки, от раскрытия переменной. Кавычки не означают, что цитируемое является файлом. Чтобы явно указать, что значение является файлом, добавьте к нему префикс относительного или абсолютного пути.

Учитывая сказанное, можно предположить, что GNU catтакже должен проверять, является ли -файлом в текущем рабочем каталоге, но было бы необычно, чтобы имена файлов начинались с дефиса или были бы только дефисом., так что это может быть проблемой производительности. В эссе Дэвида Уилера, Исправление имен файлов в UNIX и Linux , есть хорошее обсуждение этой проблемы в историческом контексте.

0
27.01.2020, 21:49

Теги

Похожие вопросы