Значение обратной косой черты

Когда Вы работаете google-chrome, процесс обнаруживает, что существует открытый экземпляр Chrome и отправляет ему сообщение для открытия файла. Сообщение содержит имя файла. Firefox работает таким же образом. Процесс это запускается с оболочки, не является уже рабочим процессом браузера.

<(…) создайте работы путем создания неименованного канала. Это передается команде с именем как /dev/fd/42, значение “файла это уже открыто на дескрипторе 42”. К этому файлу может только получить доступ процесс, который был запущен для выполнения командной строки, не уже рабочим процессом браузера.

Для передачи данных рабочему процессу браузера данные должны быть в файле с именем, к которому могут получить доступ оба процесса. С Firefox можно использовать именованный канал:

mkfifo f
grep "simple" SimpleDoc.txt >f &
firefox f
rm f

Chrome, кажется, не может читать из канала, таким образом, необходимо создать временный файл. Вы могли бы также сделать это для Firefox также.

В zsh, различный процесс susbtitution конструкция =() создает временный файл.

google-chrome =(grep "simple" SimpleDoc.txt)

В ударе необходимо создать временный файл вручную.

tmp=$(mktemp)
grep "simple" SimpleDoc.txt >$tmp
google-chrome "$tmp"
rm "$tmp"
3
26.07.2014, 03:48
2 ответа

Обратный слеш является экранирующим символом в синтаксисе оболочки , который:

должен сохранять буквальное значение следующего символа, за исключением . ... <обратная косая черта> ... будет удалено

Так что \S означает то же самое, что и S, поскольку S не является символом новой строки, а также не является специальным символом оболочки, который может быть удален ($), ", ', {, [, `, \, |, &, ; , <, >, (, ), ? , *, [, #, ~, =, %, , или табуляция). Для включения буквального обратного слеша в аргумент, переданный в echo, необходимо по очереди экранировать его с помощью \ или любого другого оператора кавычки:

echo \\Smith

или

echo '\Smith'

или

echo "\Smith"

(\ по-прежнему сохраняет особое значение в двойных кавычках, но не в тех случаях, когда за ними следует S, а только в тех случаях, когда за ними следует \, `, $, " или нью-лайн).

Теперь многие реализации echo также обращаются к \ специально, когда они находятся в их аргументе (хотя обычно не сопровождаются S, хотя нет гарантии), поэтому вы можете захотеть использовать printf вместо:

printf '%s\n' '\Smith'

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

5
27.01.2020, 21:12

\S ускользает от S, что не является особым характером, таким образом, дает S. Чтобы распечатать его, необходимо удвоить обратный слеш: echo \\Smith

EDIT: Но в целом, лучше использовать printf. См. разницу между echo x\\by, которая выводит "y" (буква "x" перезаписывается обратным пробелом \b) с некоторыми версиями echo (тире, zsh), и printf "%s\n" x\\by, которая выводит "x\by".

.
2
27.01.2020, 21:12

Теги

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