Как экранировать пробел
Перейти к содержимому

Как экранировать пробел

  • автор:

Форум русскоязычного сообщества Ubuntu

Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

  • Форум русскоязычного сообщества Ubuntu »
  • Ubuntu Russian LoCo »
  • Разработка (Модератор: Azure) »
  • [решено] bash, как правильно экранировать пробелы

Страницы: [1] Вниз

Автор Тема: [решено] bash, как правильно экранировать пробелы (Прочитано 6436 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Страницы: [1] Вверх

  • Форум русскоязычного сообщества Ubuntu »
  • Ubuntu Russian LoCo »
  • Разработка (Модератор: Azure) »
  • [решено] bash, как правильно экранировать пробелы

Страница сгенерирована за 0.058 секунд. Запросов: 25.

  • Сайт
  • Об Ubuntu
  • Скачать Ubuntu
  • Семейство Ubuntu
  • Новости
  • Форум
  • Помощь
  • Правила
  • Документация
  • Пользовательская документация
  • Официальная документация
  • Семейство Ubuntu
  • Материалы для загрузки
  • Совместимость с оборудованием
  • RSS лента
  • Сообщество
  • Наши проекты
  • Местные сообщества
  • Перевод Ubuntu
  • Тестирование
  • RSS лента

© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.

Как написать путь файла с пробелами в функции system в C?

#include
void main() system(«gcc C:/Folder/My Folder/example.c» );
>
Так — не работает.
Если убрать пробел из имени папки (MyFolder) — работает.
Как это можно исправить?

  • Вопрос задан более трёх лет назад
  • 1152 просмотра

5 комментариев

Простой 5 комментариев

Может так прокатит:
system(«gcc C:/Folder/My\ Folder/example.c» );
?
Евгений Вольф, тогда уж system(«gcc C:/Folder/My\\ Folder/example.c» );

Qubc

Qubc @Qubc Автор вопроса
Евгений Вольф, обратный слэш и пробел точно не заработает.

Евгений Вольф, Толстый Лорри,
Нам нужно двойное экранирование: для командной строки ОС и для Си.
Первое заэкранирует пробел для Си, но для ОС строка окажется та же.
Второе подставит обратный слэш, но ведь в ОС не так всё экранируется…

Mercury13, для ОС экранируется пробел, а не обратный слэш.
Решения вопроса 1
Программист на «си с крестами» и не только

Заэкранировать кавыки.
system(«gcc \»C:/Folder/My Folder/example.c\»» );

Точно так же экранируется и обратный слэш, если вдруг потребуется.

system("gcc \"C:\\Folder\\My Folder\\example.c\"" );

Экранирование символов — механизм, имеющийся в текстовых языках и протоколах. Он служит, чтобы символы, которые считаются служебными и имеют особое значение, этого значения лишить и объявить «просто символами». Нам нужно двойное экранирование: для ОС (строка с пробелами закавычивается) и для Си (перед кавычкой слэш).

Bash: путь с пробелами в массиве

В результате видно, что возникает проблема с пробелом в пути ~/.config/sublime-text-3/Installed Packages и Packages воспринимается как элемент массива. Как её можно исправить? Единственное, что пришло в голову, это экранировать пробел:

paths=( ~/.config/sublime-text-3/Installed\ Packages ~/.config/sublime-text-3/Local ~/.config/sublime-text-3/Packages ) 

Но результат тот же. P. S. Если код в песочнице не работает, то нужно очистить куки; по крайней мере у меня возникали какие-то проблемы в Chrome с этим.

Как избежать в командной строке Windows проблем с пробелом в пути к файлам

В средах командной строки, таких как командная строка Windows и PowerShell, пробелы используются для разделения команд и аргументов, но имена файлов и папок также могут содержать пробелы. Чтобы указать путь к файлу имеющего символ пробела в названии или пути к файлу, вам нужно «экранировать» его.

Почему нужно избегать символ пробела?

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

Например, предположим, что у вас есть текстовый файл, содержимое которого вы хотите просмотреть. Вы можете сделать это с помощью команды type. Предполагая, что текстовый файл находится по адресу C:\Папка\File.txt, следующая команда в командной строке покажет содержимое файла:

type C:\Папка\File.txt

Отлично! А что, если у вас есть такой же файл по адресу C:\Новая папка\File.txt? Если вы попробуете выполнить приведенную ниже команду, это не сработает — пробелы в пути к файлу мешают правильно обработать команду.

type C:\Новая папка\File.txt

Командная строка считает, что вы пытаетесь найти файл с именем Новая, в результате вы получаете: «Ошибка во время обработки: C:\Новая.
Системе не удается найти указанный путь.».
Тоже самое будет? если пробел есть в имени файла New File.txt

Ошибка командной строки при отсутствии экранирования пробелов

Три способа избежать ошибок из-за символа пробел в Windows 10

Есть три разных способа избежать проблем используя пробел в пути к файлу Windows:

  1. Заключив путь (или его части) в двойные кавычки ( ” ).
  2. Добавляя символ вставки ( ^ ) перед каждым пробелом. (Это работает только в командной строке / CMD.)
  3. Добавляя знак ударения ( ` ) перед каждым пробелом. (Это работает только в PowerShell.)

Мы покажем вам, как использовать каждый из перечисленных способов.

Заключите путь к файлу в кавычки («)

Стандартный способ убедиться, что Windows правильно обрабатывает путь к файлу, — заключить его в двойные кавычки » . Например, в нашем примере команды выше мы просто выполняем следующее:

type "C:\Новая папка\Test File.txt"

Вы можете заключить части пути в кавычки, если хотите. Например, предположим, что у вас есть файл с именем File.txt в этой папке. Вы можете запустить следующее:

type C:\"Новая папка"\File.txt

Однако в этом нет необходимости — в большинстве случаев вы можете просто заключить весь путь в кавычки.

Это решение работает как в традиционной среде командной строки (CMD), так и в Windows PowerShell.

Заключение пробелов в двойные кавычки в командной строке

Иногда: используйте символ каретки для правильной обработки пробелов (^)

В командной строке символ каретки ^ теоретически позволяет избежать пробелов. Просто добавьте его перед каждым пробелом в имени файла. (Вы найдете этот символ в числовом ряду на клавиатуре. Чтобы ввести символ каретки, нажмите Shift + 6 .)

Вот проблема: хотя это должно работать, а иногда и работает, это работает не всегда. Командная строка обрабатывает этот символ странно.

Например, запустите следующую команду, но она не сработает:

type C:\Новая^ папка\Test^ File.txt

Ошибка экранирования пробела в командной строке

С другой стороны, если мы попытаемся открыть наш файл напрямую, введя его путь в командную строку, мы увидим, что символ каретки правильно экранирует пробелы:

C:\Новая^ папка\Test^ File.txt

Экранирование пробела каретки работает в командной строке

Итак, когда это работает? Что ж, исходя из нашего исследования, похоже, что с некоторыми приложениями он работает, а с другими — нет. Это может варьироваться в зависимости от команды, которую вы используете. Командная строка обрабатывает этот символ странно. Если вам интересно, попробуйте с любой командой, которую вы используете, — она ​​может работать, а может и не работать.

Мы рекомендуем использовать двойные кавычки в командной строке или переключиться на PowerShell и использовать способ, рассмотренный ниже.

PowerShell: используйте символ ударения (`)

PowerShell использует знак ударения ` в качестве символа-пробела. Просто добавьте его перед каждым пробелом в имени файла. (Вы найдете этот символ над клавишей Tab и под клавишей Esc на клавиатуре.)

type C:\Новая` папка\Test` File.txt

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

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

Обратите внимание, что это работает только в среде PowerShell. В командной строке вам нужно будет использовать символ каретки.

Если вы знакомы с UNIX-подобными операционными системами, такими как Linux и macOS, вы, возможно, привыкли использовать символ обратной косой черты ( \ ) перед пробелом, чтобы правильно обработать команду. Windows использует его для пути к файлам, поэтому он не работает — символы каретки ( ^ ) и ударения ( ` ) это своего рода обратная косая черта Windows в зависимости от того, какую оболочку вы используете.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *