AIX cifs имя хоста с подчеркиванием

Неинтерпретируемые аргументы оболочки $1, $2, и т.д. Необходимо поместить их расширение в двойные кавычки в большинстве контекстов, для предотвращения значения параметра, расширяемого далее. "$@" дает Вам список всех параметров.

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

first_argument_as_filename_in_unix_syntax=$(posix "$1")

Двойные кавычки необходимы. Если Вы пишете posix $1, затем то, что Вы являетесь передающими, не является значением первого параметра, но результатом работающего разделения слова и globbing на значении первого параметра. Необходимо будет использовать надлежащее заключение в кавычки при вызове сценария, также. Например, если Вы пишете это в ударе:

myscript c:\path with spaces\somefile

затем фактические, неинтерпретируемые аргументы myscript будет c:path, with и spacessomefile. Не делайте этого.

Ваш posix функция является неправильной, снова потому что она испытывает недостаток в двойных кавычках вокруг $1. Всегда помещайте двойные кавычки вокруг переменной и управляйте заменами: "$foo", "$(foo)". Легче помнить это правило, чем исключения, где Вам на самом деле не нужны кавычки.

echo делает его собственную обработку в некоторых случаях, и вызов внешних процессов является медленным (особенно в Windows). Можно сделать целую обработку в ударе.

posix () {
  path="${1//\\//}"
  case "$path" in
    ?:*) drive="${p:0:1}"; drive="${drive,}"; p="/$drive/${p:2}";;
  esac
  printf %s "$p"
}

zsh функция, на которую сослался jw013, не делает то, что Вы, кажется, думаете, что это делает. Можно поместить noglob перед командой и zsh не выполняет globbing (т.е. поколение имени файла, т.е. расширение подстановочных знаков) на аргументах. Например, в zsh, если Вы пишете noglob locate *foo*bar*, затем locate назван с аргументом *foo*bar*. Вы обычно скрывались бы noglob встроенный позади псевдонима. Эта функция не важна, для какого Вы пытаетесь сделать.

1
14.01.2014, 08:34
1 ответ

Заключение в кавычки от этой статьи Wiki:

Интернет-стандарты (Запрос на Комментарии) для мандата протоколов, что маркировки имени хоста компонента могут содержать только буквы ASCII через 'z' (нечувствительным к регистру способом), цифры '0' до '9', и дефис ('-'). Исходная спецификация имен хостов в RFC 952, переданном под мандат, который маркировки не могли запустить с цифры или с дефиса и не должны заканчивать дефисом. Однако последующая спецификация (RFC 1123) разрешила маркировкам имени хоста запускаться с цифр. Никакие другие символы, знаки пунктуации или пробел не разрешены.

Подчеркивание _ не допустимый символ в имени хоста.

2
27.01.2020, 23:38
  • 1
    alrity это - то, что я предполагал также..., но являюсь там anyother путем? –  JackyBoi 14.01.2014, 04:46
  • 2
    Используйте тире - вместо этого? –  casey 14.01.2014, 04:53

Теги

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