Итерация по буквам в рыбной раковине - PullRequest
0 голосов
/ 18 марта 2019

В bash я могу:

for i in /dev/sd{b..g}; do pvcreate $i; done

Искать эквивалент этой петли в рыбе.

for i in /dev/sd{b..g}
    pvcreate $i
end

Возвращает Устройство /dev/sdb..g не найдено (или проигнорировано при фильтрации). ошибка

1 Ответ

1 голос
/ 18 марта 2019

Прямого перевода не существует: fish делает элементы, разделенные запятыми, внутри фигурных скобок - https://fishshell.com/docs/current/index.html#expand-brace

Вы также не можете сделать for i in /dev/sd[b-g], потому что fish не использует наборы символов в качестве подстановочных знаков при глобализации -https://fishshell.com/docs/current/index.html#expand-wildcard

В итоге вы вызываете какую-то внешнюю программу для генерации этого списка файлов, и вы знаете, что bash работает, поэтому:

for i in (bash -c 'printf "%s\n" /dev/sd{b..g}'); ...

Это пример одного из принципы дизайна рыбы :

Все, что можно сделать на других языках оболочки, должно быть возможным в рыбе, хотя при этом рыба может полагаться на внешние команды.

...