Вопросы с тегом «variable-substitution»



2
Что означает $ {PATH: +: $ {PATH}}?
Недавно я заметил следующее в моем профиле cygwin, точнее: /usr/local/bin:/usr/bin${PATH:+:${PATH}} Что это означает? Почему не просто $ PATH? Это «если $ PATH существует, то добавить: $ PATH»? Моя цель - поменять порядок и поместить пути cygwin за путями Windows. В прошлом я бы $PATH:/usr/local/bin:/usr/bin но это меня смущает. Может быть, …

4
Почему моя переменная локальна в одном цикле 'while read', а не в другом, на первый взгляд, похожем цикле?
Почему я получаю разные значения $xиз приведенных ниже фрагментов? #!/bin/bash x=1 echo fred > junk ; while read var ; do x=55 ; done < junk echo x=$x # x=55 .. I'd expect this result x=1 cat junk | while read var ; do x=55 ; done echo x=$x # …

7
Двойная и тройная замена в bash и zsh
Продолжение к фоновой части в этом вопросе . В bashя могу использовать ${!FOO}для двойной замены, в zsh ${(P)FOO}. В обоих случаях работает старая школа (hack-y) eval \$$FOO. Итак, самая разумная и логичная вещь для меня - ${${FOO}}, ${${${FOO}}}…двойная / тройная / n замена. Почему это не работает, как ожидалось? Второе: …

4
Escape переменная для использования в качестве содержимого другого скрипта
Этот вопрос не о том, как написать правильно экранированный строковый литерал. Я не смог найти ни одного связанного вопроса, который бы не касался того, как экранировать переменные для непосредственного использования в скрипте или другими программами. Моя цель - включить скрипт для генерации других скриптов. Это связано с тем, что задачи …

2
Как избежать пробела после переменной bash в строке?
У меня есть переменная для цвета. Я использую его, чтобы установить цвет для строк, оценивая его внутри строки. Тем не менее, мне нужно включить пробел после имени (чтобы имя не содержало часть текста). Это иногда выглядит плохо. Как я могу избежать использования (печати) этого пространства? Пример (скажем так Red=1и NC=2): …

3
Поддерживает ли bash обратные ссылки в расширении параметров?
У меня есть имя переменной , descrкоторая может содержать строку Blah: -> r1-ae0-2 / [123], -> s7-Gi0-0-1:1-US / Fooи т.д. Я хочу , чтобы получить -> r1-ae0-2, -> s7-Gi0-0-1:1-USчасть из строки. На данный момент я использую descr=$(grep -oP '\->\s*\S+' <<< "$descr"для этого. Есть лучший способ это сделать? Возможно ли это …

1
Почему раскрытие переменной без $ работает в выражениях?
#!/bin/bash VALUE=10 if [[ VALUE -eq 10 ]] then echo "Yes" fi К моему удивлению, это выводит «Да». Я бы ожидал, что это потребует [[ $VALUE -eq 10 ]]. Я отсканировал CONDITIONAL EXPRESSIONSраздел man bash, но я не нашел ничего, чтобы объяснить это поведение.

4
Можно ли распечатать содержимое содержимого переменной с помощью сценария оболочки? (косвенная ссылка)
Предположим, я объявил следующие переменные: $ var='$test' $ test="my string" Если я распечатаю их содержимое, я вижу следующее: $ echo $var $test $ echo $test my string Я хотел бы найти способ напечатать содержание содержимого $var(которое является содержанием $test). Поэтому я попытался сделать следующее: $ echo $(echo $var) $test Но …

4
$ {! FOO} и zsh
${!FOO}выполняет двойную подстановку bash, то есть принимает (строковое) значение FOO и использует его в качестве имени переменной. zshне поддерживает эту функцию. Есть ли способ сделать эту работу такой же в bashи zsh? Фон: У меня есть список переменных среды, как PATH MAIL EDITOR и хотите сначала вывести имена переменных, а …

3
Является ли «$ {PS1-}» допустимым синтаксисом и чем он отличается от простого «$ PS1»?
Я смотрю на сценарий, который имеет: if [ "${PS1-}" ]; then Этот трейлинг -немного беспокоит меня, потому что он не соответствует стандартному синтаксису Posix или Bash. Это какой-то загадочный синтаксис, который был всегда, или это опечатка? Любые ссылки на стандарты / документы будут приветствоваться. Обычно я бы написал это: if …

1
Видите расширение переменных Bash для отладки?
Есть ли какие-либо инструменты / приемы для расширения переменных, чтобы облегчить чтение bash-кода? Например, это будет конвертировать следующее: DIR=/var/tmp FILE=${DIR}/file SCRIPT_ROOT=/opt/root TOOL=${SCRIPT_ROOT}/tool.sh ${TOOL} ${FILE} чтобы: DIR=/var/tmp FILE=/var/tmp/file SCRIPT_ROOT=/opt/root TOOL=/opt/root/tool.sh /opt/root/tool.sh /var/tmp/file Я конвертирую код BASH в Python и читаю синтаксис BASH чертовски утомительно.

3
Разыменование составной переменной name
Я могу сделать это, но для этого нужно создать строку переменной, а затем разыменовать ее. Есть ли способ сократить это до более простого утверждения? #!/bin/bash FRUITS="BANANA APPLE ORANGE" BANANA_COLOUR="Yellow" APPLE_COLOUR="Green or Red" ORANGE_COLOUR="Blue" for fruit in $( echo $FRUITS ); do fruit_colour="${fruit}_COLOUR" echo $fruit is ${!fruit_colour} done Я перепробовал множество …


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.