Более обширный список проблемных символов слова
if (buffer.IndexOf('\u2013') > -1) buffer = buffer.Replace('\u2013', '-');
if (buffer.IndexOf('\u2014') > -1) buffer = buffer.Replace('\u2014', '-');
if (buffer.IndexOf('\u2015') > -1) buffer = buffer.Replace('\u2015', '-');
if (buffer.IndexOf('\u2017') > -1) buffer = buffer.Replace('\u2017', '_');
if (buffer.IndexOf('\u2018') > -1) buffer = buffer.Replace('\u2018', '\'');
if (buffer.IndexOf('\u2019') > -1) buffer = buffer.Replace('\u2019', '\'');
if (buffer.IndexOf('\u201a') > -1) buffer = buffer.Replace('\u201a', ',');
if (buffer.IndexOf('\u201b') > -1) buffer = buffer.Replace('\u201b', '\'');
if (buffer.IndexOf('\u201c') > -1) buffer = buffer.Replace('\u201c', '\"');
if (buffer.IndexOf('\u201d') > -1) buffer = buffer.Replace('\u201d', '\"');
if (buffer.IndexOf('\u201e') > -1) buffer = buffer.Replace('\u201e', '\"');
if (buffer.IndexOf('\u2026') > -1) buffer = buffer.Replace("\u2026", "...");
if (buffer.IndexOf('\u2032') > -1) buffer = buffer.Replace('\u2032', '\'');
if (buffer.IndexOf('\u2033') > -1) buffer = buffer.Replace('\u2033', '\"');
. name
отправляет файл с именем name
в текущую оболочку. Итак, если файл содержит это
A=hello
, то, если вы его исходите, впоследствии вы можете обратиться к переменной с именем A
, которая будет содержать hello . Но если вы выполните файл (с соответствующими правами выполнения и строкой #! / Интерпретатор
), такие вещи не будут работать, поскольку переменная и другие вещи, которые устанавливает сценарий, будут влиять только на его подоболочка, в которой он запущен.
Получение двоичного файла не имеет никакого смысла: Shell не знает, как интерпретировать двоичный материал (помните, что он вставляет вещи, появляющиеся в этом файле, в текущую оболочку - во многом как старый добрый #include
механизм в C). Пример:
head -c 10 /dev/urandom > foo.sh; . foo.sh # don't do this at home!
bash: �ǻD$�/�: file or directory not found
Однако выполнение двоичного файла , конечно, имеет большой смысл. Итак, обычно вы хотите просто назвать файл, который хотите выполнить, и в особых случаях, например, в случае A = hello
выше, вы хотите создать файл.
Использование « source
» или «.
» заставляет команды выполняться в текущем процессе. Запуск сценария как исполняемого файла дает ему собственный процесс.
Это наиболее важно, если вы пытаетесь установить переменную среды в текущей оболочке (что вы не можете сделать в отдельном процессе) или хотите прервать выполнение сценария без прерывания вашей оболочки (которую можно только сделать в отдельном процессе).
Первый выполняет команду. Второй - сокращение для включения сценария оболочки в другой.
Этот синтаксис используется для «загрузки» и анализа сценария. Это наиболее полезно, когда у вас есть сценарий, который имеет общие функции с множеством других сценариев, и вы можете просто «включить» его. См. http://tldp.org/LDP/abs/html/internal.html для получения подробной информации (прокрутите вниз до команды «точка»).
Запуск «runme» создаст новый процесс, который продолжит свой веселый путь и не повлияет на вашу оболочку.
Запуск «. Runme» позволит скрипту «runme» измениться переменные среды, каталоги изменений и множество других вещей, которые вы можете захотеть сделать за вас. Это возможно только потому, что это интерпретируется процессом оболочки, который уже запущен для вас. Как следствие, если вы используете bash в качестве оболочки для входа в систему, вы можете использовать только "." запись с помощью сценария bash, а не (например) двоичного файла в сценарии оболочки C.