В рыбной оболочке, как установить переменную с запасным вариантом по умолчанию? - PullRequest
0 голосов
/ 05 февраля 2019

Я ищу эквивалент следующего синтаксиса bash, но для оболочки shell:

local datafile="${_Z_DATA:-$HOME/.z}"

т.е. определяю локальную переменную, которая примет значение $_Z_DATA, если этот определитили же примет значение $HOME/.z

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Я бы написал это как:

set -q _Z_DATA; or set _Z_DATA $HOME/.z

на рыбе 3.0+, вы можете написать:

set -q _Z_DATA || set _Z_DATA $HOME/.z

Если вы сделаете это много, вы можете определить функцию:

function defaultset --no-scope-shadowing
    set -q $argv[1] || set $argv[1] $argv[2..-1]
end

# example usage
defaultset _Z_DATA $HOME/.z 
0 голосов
/ 05 февраля 2019

Насколько я знаю, для этого нет синтаксиса;вам нужно что-то вроде

set datafile "$_Z_DATA"
test -z "$datafile"; and set datafile "$HOME/.z"

или

if set -q _Z_DATA; and test -n _Z_DATA
  set datafile "$_Z_DATA"
else
  set datafile "$HOME/.z"
fi

В отличие от bash, переменные, определенные внутри функции, автоматически являются локальными для этой функции, поэтому эквивалент local не требуется.(Предыдущая версия этого ответа использовала опцию -l для локализации переменной, но это делает ее локальной для любого, в котором block set встречается.)

...