Описание тега tensai-bakabon
Что важно понимать, что ~
расширение-это функция оболочки (несколько снарядов), это не магический персонаж, чем означает, что ваш домашний каталог, где он используется.
Он расширяется (в оболочке, которой является приложение, используемое для интерпретации командной строки), как $ВАР
расширяется его значение при определенных условиях при использовании в оболочке командной строки перед выполнением команды.
Эта функция впервые появилась в C-Shell в конце 1970-х годов (Bourne оболочки не было его, ни его предшественник Томсона оболочки), позже была добавлена оболочка Korn (новые оболочки построены на Борна в 80-х годах). В конечном итоге он был стандартизирована в POSIX и теперь доступен в большинстве оболочек, в том числе не-POSIX, как рыба
.
Потому что в такое широкое применение в раковинах, некоторые номера-оболочка приложения также признать его означает домашний каталог. Это дело многих приложений в файлы конфигурации или их собственные командной строки (шавка
, slrn
, ВИМ
...).
Баш
конкретно (что это снаряд проекта GNU и широко используется во многих операционных системах на основе Linux), при вызове в качестве рыб
, в основном соответствует стандарту POSIX правила о ~
расширение, и в местах, не указанных в стандарте POSIX, ведет себя в основном как оболочка Korn (который является частью клон).
В то время как $ВАР
расширяется в большинстве мест (за исключением внутри одинарных кавычек), ~
расширение, будучи второстепенным раскрывается только в нескольких конкретных условиях.
Он расширяется, когда на его собственный аргумент в контексте списка, в контексте, где ожидается строка.
Вот несколько примеров, где это расширяется в Баш
:
УМК арг ~ другие арг
ВАР=~
ВАР=х:~:х
(требуется в POSIX, используется для переменных, какпуть
,содержат
...)для меня в ~
[[ ~ = текст ]]
[[ текст = ~ ]]
(экспансия~
, принимаемых в качестве образца в АТ&ТКШ
, но неБаш
с 4.0).случае ~ в ~) ...
${ВАР#~}
(хотя и не в некоторых других снарядов)УМК ФОО=~
(правда, не при вызове, какш
, и только тогда, когда что слева от=
имеет форму некотируемыхБаш
имени переменной)УМК ~/х
(требуется в POSIX очевидно)УМК ~:х
(но неХ:~:Х
илиХ~-Х
)в[~]=фу; эхо "${а[~]} $((а[~]))"
(не в некоторых других снарядов)
Вот несколько примеров, где это не расширены:
Эхо "~" '~'
Эхо ~@ ~~
(также обратите внимание, что~и
призвана расширить в домашний каталог пользователяу
).Эхо @~
(( Дома == ~ ))
,$(( ВАР + ~ ))
- с
extglob
:чехол $VAR в @(~|другой))...
(хотяпри $VAR в ~|другое)
- это нормально). ./настроить --префикс=~
(а- префикс
не является допустимым именем переменной)УМК "фу"=~
(вБаш
, из-за кавычек).- когда вызывается как
Ш.
:экспорт "фу"=~
,ОКР переменной JAVA_HOME=~ УМК
...
Как к тому, что она расширяется: ~
только расширяет содержание дома
переменной, или когда он не установлен в домашний каталог текущего пользователя в учетную запись в базе данных (в качестве дополнения с POSIX оставляет, что поведение не определено).
Следует отметить, что в ksh88 и Баш
до версии 4.0, Тильда расширение перенес подстановка (именем поколения) в списке контекстов:
$ Баш-с 'Эхо "домашнем"'
/главная/***Стефан***
$ Баш-с 'Эхо ~'
/главная/***Стефан*** /домашний/Стефан
$ Баш-с 'Эхо "~"'
~
Это не должно быть проблемой в обычных случаях.
Обратите внимание, что поскольку он расширил, то же предупреждение относится как и других форм экспансии.
кд ~
Не работает, если $дома
начинается с -
или содержит ..
компонентов. Поэтому, хоть это и очень маловероятно, чтобы когда-нибудь сделать какой-либо разницы, строго говоря, следует писать:
компакт-П -- ~
Или даже:
случае ~ в
(/*) кр -р ~;;
(*) д=~; компакт-П "./$д";;
эсок
(для покрытия для значений $дома
как -
, +2
...) или просто:
компакт-диск
(как компакт-диск
перенесет вас в вашу домашнюю директорию без каких-либо аргументов)
Другие оболочки имеют более продвинутые ~
разложений. Например, в ЗШ
, у нас есть:
~4
,~-
,~-2
(завершение) используется для расширения каталогов в каталоге стека (места у тебякд
раньше).- динамический именованный каталогах. Вы можете определить свой собственный механизм, чтобы решить, как
~что-то
расширяется.