Почему расширение Brace с переменными не работает должным образом?

Gnome Shell (3.22 )и Debian 9 (stretch)

Просто перейдите к Звук Звуковые эффекты и выключите Громкость оповещения , как показано ниже:

Gnome 3 Sound panel

0
04.02.2020, 20:20
2 ответа

Этот синтаксис будет работать в zsh (, где он исходит из ), ksh93 или yash -o braceexpand, но не в bash, где вы не можете использовать расширения внутри {x..y}. Но здесь в любом случае лучше использовать циклы в стиле ksh93 -for ((...)):

x=100    
for ((i = 0; i <= x; i += 50)) {
  printf '%s\n' "$i"
}
2
28.04.2021, 23:25

Это просто невозможно в bash. Если вы видите порядок раскрытия в bash, то раскрытие переменной происходит позже, чем время, когда оболочка раскрывает фигурную скобку {0..50}. Таким образом, во время расширения фигурной скобки оболочка видит конструкцию как {0..$x..50}, что было бы недопустимой конструкцией для раскрытия.

Вам нужен альтернативный способ, лучшим способом будет forцикл в bashарифметическом контексте.

for ((i=0; i<=100; i+=50)); do 
    printf "%d\n" "$i"
done
2
28.04.2021, 23:25

Теги

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