Для завершения этого в стиле, использующем только созданный-ins, необходимо было бы использовать оценку:
d=12
for i in `eval echo {0..$d}`
do
echo $i
done
Но с seq
:
lowerlimit=0
upperlimit=12
for i in $(seq $lowerlimit $upperlimit)
do
echo $i
done
Лично я нахожу использование seq
быть более читаемым.
Единственный надежный способ записать сценарии, которые поддерживают различные операционные системы, состоит в том, чтобы только использовать функции, которые определяются POSIX.
Для вещей как Ваши персональные конфигурации оболочки можно использовать взломы, которые соответствуют определенному варианту использования. Что-то как следующее ужасно, но выполнит цель.
if ls --version 2>/dev/null | grep -q 'coreutils'; then
alias ls='ls --color=always'
else
alias ls='ls -G'
fi
Это не прямой ответ на ваш вопрос, но у меня есть скрипты-обёртки для обработки подобных вещей, а не дополнительные сложности в .bashrc. Например, вот мой скрипт l, который обрабатывает ваш случай кроссплатформенным способом:
Засорение кода операторами if
для переключения типа coreutils действительно работает, однако чистое программное решение для обработки различных типов состоит в использовании полиморфизма . Поскольку это Bash, у нас нет полиморфизма как такового, но я пытался найти способ подделать его. Единственное требование - ваш файл .bashrc
и т. Д. Должен быть организован в виде функций.
Сначала я создаю тест для типа платформы coreutils :
get_coreutils_platform() {
local ls_version="$(ls --version 2>/dev/null)"
if [[ "$ls_version" == *"GNU coreutils"* ]]; then
echo gnu
else
echo bsd
fi
}
Затем мы можем выполнить диспетчеризацию на основе типа:
platform=$(get_coreutils_platform)
define_standard_aliases_$platform
configure_shell_vars_$platform
Вот реализация BSD :
define_standard_aliases_bsd() {
define_standard_aliases
}
configure_shell_vars_bsd() {
configure_shell_vars
export CLICOLOR=1
}
( Обратите внимание, что мы используем переменную CLICOLOR
для включения цветов вместо использования псевдонима
, который кажется более чистым)
И имплементация GNU :
define_standard_aliases_gnu() {
define_standard_aliases
alias ls='ls --color=auto'
}
configure_shell_vars_gnu() {
configure_shell_vars
}
Для полноты картины, вот пример реализации «абстрактной базы»:
define_standard_aliases() {
alias ll='ls -l'
alias l.='ls -d .*'
}
configure_shell_vars() {
export EDITOR=vim
}
coreutils
явно, почему не только тестируют, работает ли цветной флаг, например.if ls --color=auto -d / >/dev/null 2>&1; then ...
. – Mikel 18.03.2014, 14:32