Что означает в RFC выражение «конкретный хост -»?

Если вы хотите автоматически инвертировать состояние при каждом запуске, вы также можете воспользоваться числовой операцией «логического отрицания», которая полезна для инвертирования значения. То есть логическое отрицание 0 равно 1, и наоборот.

Оболочки POSIX способны выполнять наиболее распространенные числовые и побитовые операции посредством арифметического расширения и Bash не является коротким , предоставляя также массивы , которые может быть проиндексирован целым числом, таким как 0 или 1 (и более ).

На практике:

(
# our persistent file to save state into
file=./state
# array of two states, "off" is the first so that it will be 0, and "on" will be 1
states=(off on)
# import what's been saved in our state file, if present
[ -f "$file" ] && source "$file"

# within the arithmetic expansion syntax,
# we compute new state as the logical negation (the `!` operator) of the current state
state=$(( !(state) ))
printf 'state=%d\n' $state > "$file"  # save new state to persistent file

# print current state from the array using the numeric state as index 
printf 'currently %s\n' "${states[state]}"
)

В оболочке строго POSIX это немного сложнее, потому что нам нужно обойти отсутствие массивов:

(
file=./state
# here we use a simple string instead of an array
states='off on'
[ -f "$file" ] &&. "$file"  # the `source` command POSIXly is just `.`

state=$(( !(state) ))
printf 'state=%d\n' $state > "$file"

# here we use the `cut` tool to select the piece of string based on numeric state
echo -n 'currently '; printf '%s\n' "$states" | cut -d ' ' -f $((state+1))
)

-1
22.08.2021, 13:41
0 ответов

Теги

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