Создайте a Makefile
как это.
ifneq ($(KERNELRELEASE),)
obj-m := mymodule.o
else
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
install:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules_install
%:
$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) $@
endif
Принятие источника Вашего модуля находится в mymodule.c
, выполнение make
создаст mymodule.ko
.
Можно использовать следующий синтаксис строкового литерала:
> echo $'\'single quote phrase\' "double quote phrase"'
'single quote phrase' "double quote phrase"
man bash
Слова $ формы 'строка' рассматривают особенно. Слово расширяется до строки с оставленными из обратной косой черты символами, замененными, как указано ANSI C стандарт. Escape-последовательности обратной косой черты, если есть декодируются следующим образом:
\a alert (bell) \b backspace \e \E an escape character \f form feed \n new line \r carriage return \t horizontal tab \v vertical tab \\ backslash \' single quote \" double quote \nnn the eight-bit character whose value is the octal value nnn (one to three digits) \xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) \cx a control-x character
В оболочке POSIX принимающей в Вашей строке нет никакой переменной, команды или расширения истории, и нет никакой новой строки, следуйте этим основным предписаниям:
Для заключения в кавычки универсальной строки с одинарными кавычками выполните следующие действия:
Замените любой последовательностью символов неодинарной кавычки с той же последовательностью с добавленным продвижением и запаздывающими одинарными кавычками: 'aaa' ==> ''aaa''
Escape с обратной косой чертой каждый существующий ранее символ одинарной кавычки: ' ==> \'
В частности, ''aaa'' ==> \''aaa'\'
Для заключения в кавычки универсальной строки с двойными кавычками выполните следующие действия:
Добавьте ведущие и запаздывающие двойные кавычки: aaa ==> "aaa"
Escape с обратной косой чертой каждый символ двойной кавычки и каждый символ обратной косой черты: " ==> \", \ ==> \\
Несколько примеров:
''aaa""bbb''ccc\\ddd'' ==> \'\''aaa""bbb'\'\''ccc\\ddd'\'\'
==> "''aaa\"\"bbb''ccc\\\\ddd''"
так, чтобы Вы пример могли быть расширены со следующим:
#!/bin/sh
echo \''aaa'\'' "bbb"'
echo "'aaa' \"bbb\""
sudo su enzotib -c 'echo \'\'\''aaa'\''\'\'\'' "bbb"'\'
sudo su enzotib -c 'echo "'\''aaa'\'' \"bbb\""'
sudo su enzotib -c "echo \\''aaa'\\'' \"bbb\"'"
sudo su enzotib -c "echo \"'aaa' \\\"bbb\\\"\""
Простой пример эскапания цитат в оболочке:
$ echo 'abc'\''abc'
abc'abc
$ echo "abc"\""abc"
abc"abc
Это сделано путем завершения уже открытого ( »
), размещение сбежавших один ( \ '
), затем открывать другой ( '
).
В качестве альтернативы:
$ echo 'abc'"'"'abc'
abc'abc
$ echo "abc"'"'"abc"
abc"abc
Это сделано путем отделки уже открытого (
), размещая цитату в другую цитату ( »« »
), затем открывать другой ( «
).
Связан: Как избежать однозначных кавычек в пределах односмысленных строк? в Stackoverflow SE
Принятый ответ работает для простого (одноуровневого) цитирования:
$ echo $'\'single quote phrase\' "double quote phrase"'
'single quote phrase' "double quote phrase"
Чтобы команда, представленная для работы, вам нужно процитировать дважды.
Этот сценарий может выполнять всю работу:
#!/bin/bash
quote () {
local quoted=${1//\'/\'\\\'\'};
printf "'%s'" "$quoted"
}
read -r line <<-\_line_to_quote_
'single quote phrase' "double quote phrase"
_line_to_quote_
quote "$line"; echo
quote "echo $(quote "$line")"; echo
Выполните сценарий, чтобы получить:
$ script
''\''single quote phrase'\'' "double quote phrase"'
'echo '\'''\''\'\'''\''single quote phrase'\''\'\'''\'' "double quote phrase"'\'''
Первая строка работает для простого эха:
$ echo ''\''single quote phrase'\'' "double quote phrase"'
'single quote phrase' "double quote phrase"
Вторая строка будет работать для команды, заключенной в двойные кавычки:
sudo su USER -c 'echo '\'''\''\'\'''\''single quote phrase'\''\'\'''\'' "double quote phrase"'\'''
Удалите двойные кавычки, направив вывод вsed
sed 's/"//g'
somethingThatProducesDoubleQuotesHere | removeDoubleQuotes
Или вы могли бы использовать метод, который облегчит жизнь в будущем
removeDoubleQuotes() {
sed 's/"//g'
# EXAMPLES:
# somethingThatProducesDoubleQuotesHere | removeDoubleQuotes
}