Что означает иметь $ “dollarsign-снабженная-префиксом строка” в сценарии?

Я предполагаю, что у Вас есть пользователи, что каждый раз они запускают приложение, это приложение отслеживает то, кто запустил его путем записи некоторой информации в файле, расположенном в доле самбы, доступной всеми рабочими станциями. Так как Вы обращаетесь к "Журналу Доступа", я также предполагаю, что только необходимо добавить в файл и не изменить его содержание.

Если файл находится в ext2/3/4 файловой системе на стороне сервера, то удостоверьтесь, что у пользователей самбы нет полномочий записи к ее каталогу. Это избежит случайного или интенсионального удаления. Затем включите атрибут только добавления с chattr +a <filename>, таким образом, информация может только быть добавлена и не удалять/изменять/усеченная. Файл может все еще иметь полномочия записи всем, таким образом, приложение может добавить к нему даже с полномочиями пользователей.

Примечание: chattr мог бы работать на другие файловые системы также, например, xfs. У меня нет точного списка.

83
14.09.2012, 02:54
3 ответа

Существует две разных вещи, продолжающиеся здесь, оба зарегистрированные в bash руководство

$'

Одинарная кавычка знака доллара является специальной формой заключения в кавычки:

ANSI C заключение в кавычки

Слова $ формы 'строка' рассматривают особенно. Слово расширяется до строки с оставленными из обратной косой черты символами, замененными, как указано ANSI C стандарт.

$"

Двойная кавычка знака доллара для локализации:

Перевод локали

Дважды заключенная в кавычки строка, которой предшествует знак доллара (‘ $ ’), заставит строку быть переведенной согласно текущей локали. Если текущая локаль является C или POSIX, знак доллара проигнорирован. Если строка переводится и заменяется, замена дважды заключается в кавычки.

113
27.01.2020, 19:30

Когда строка расширена в $'', escape-последовательности интерпретируются. Из страницы справочника:

Words of the form $'string' are treated specially. The word expands to
string, with backslash-escaped characters replaced as specified by  the
ANSI  C  standard.

Легким примером является \n escape-последовательность для новой строки:

$ echo 'foo\n'
foo\n
$ echo $'foo\n'
foo

$ 

Примечание: Можно получить различные результаты в других оболочках как echo может интерпретировать escape-последовательности, не предоставляя возможности.

23
27.01.2020, 19:30
  • 1
    Нет никакого упоминания о $"...", согласно вопросу. –  Peter.O 14.09.2012, 10:05

Вы неправильно истолковываете руководство. Вы будете только видеть эффект, когда $ - заключенная в кавычки строка будет внутри a ${parameter} расширение.

$ echo "${v:-'ab\ncd'}"
'ab\ncd'
$ echo "${v:-$'ab\ncd'}"
ab
cd

Источник и дополнительные материалы для чтения: https://lists.gnu.org/archive/html/bug-bash/2005-10/msg00017.html

-4
27.01.2020, 19:30
  • 1
    Это не отвечает на вопрос: $"…" что-то другое. каталоги –  Gilles 'SO- stop being evil' 14.09.2012, 02:55
  • 2
    Извините, но Ваш ответ является неправильным: нет никакой потребности использовать ${} расширение для использования заключения в кавычки ANSI. Проверьте на себя: echo $'ab\ncd' –  rozcietrzewiacz 14.09.2012, 10:04
  • 3
    я думаю, что этот ответ пытался объяснить extquote неправильно вместо того, что спрашивал вопрос. –  jw013 14.09.2012, 17:48
  • 4
    "${...}" отличается, чем $"..." –  GypsyCosmonaut 28.07.2017, 01:13

Теги

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