Я хотел бы сократить один из моих сценариев, и у меня есть идея na, но я не знаю, как это сделать. У вас есть такой код:
COMMAND="find /etc -type "
case $1:
"directory") $COMMAND d
;;
esac
Конечно, это короткая версия :) И теперь я хочу уметь сокращать это, а не бушуть, что $ COMMAND везде, поэтому я хотел бы что-то вроде этого:
$COMMAND <the case statement return value>
, но я не хочу использовать переменную для хранения результата.
Спасибо :) Надеюсь, вы поняли, чего я хочу: D
EDIT 1: его можно создать функцию и передать параметр find как $ 1, как указано Serg. Теперь, ЕСЛИ я хотел сделать это просто без функции, я уверен, что есть способ: D Не так, как Серг не решал его, мне просто интересно: D
Поместите его в функцию:
MyFind () {
COMMAND="find /etc -type "
case $1:
"directory") $COMMAND d
;;
esac
}
Теперь вы всегда можете использовать его как MyFind $TYPE
Вы также можете поместить только оператор case в функцию
FType () {
case $1 in
"directory") echo d;;
"file") echo f;;
esac
}
COMMAND="find /etc -type "
$COMMAND $(FType $TYPE)
Другой подход:
declare -A foo # associative array
foo["directory"]="d"
foo["file"]="f"
foo["link"]="l"
find /etc -type ${foo["$1"]}
Еще одна идея добавить к уже широкому набору опций из превосходного ответа Сержа.
Возможно, вы сможете использовать alias для этого - возможно, с некоторыми небольшими изменениями в том, как вы сейчас это делаете вещи.
alias - это просто слово, которое вы выбираете для сопоставления с большей строкой, которую оболочка будет расширять каждый раз, когда она встречается с ней. Возможно, наиболее часто используемым случаем является применение «по умолчанию» к существующей команде, например:
alias ls='ls -a --color=auto'
Однако нет необходимости, чтобы ваш alias был назван в честь существующей команды - или даже короче, чем шаблон назначения - так что вы могли бы, например, alias tgzcreator='tar -czvf'
alias es используют ресурс с оболочкой, в которой они определены. «Persistent» alias es для вас можно настроить в ~/.bash_aliases, который должен быть автоматически загружен с помощью наиболее хорошо написанных сценариев .bashrc по умолчанию.
Обратите внимание на пару советов: [ ! d6] Вместо того, чтобы беспокоиться в конкретном сценарии, будет ли ранее установленный alias мешать вашему коду, вы можете префикс его с обратной косой чертой, чтобы предотвратить пропущение alias. например Обычно я alias cp до cp -i, чтобы случайно не перезаписывать вещи, но в некоторых сценариях я явно хочу перезаписать вещи. (Я не собираюсь использовать какое-то ужасное обходное решение, например, создание известного пользователя un alias ed!) Итак, в этом скрипте я буду использовать \cp src dst alias. Возможно, по умолчанию не найдены источники в сценариях оболочки , которые запускают свою собственную неинтерактивную копию оболочки. Вы можете убедиться, что они расширены, установив опцию expand_aliases в вашем скрипте. Я получил это от: https://stackoverflow.com/questions/2197461/how-to-set-an-alias-inside-a-bash-shell-script-so-that-is-it-visible-from-the -ou
Итак, исходя из ограниченного контекста, доступного в вашем сообщении, вы можете сделать что-то , если вот так:
shopt -s expand_aliases
alias get_etc_dir='find /etc -type d'
alias get_etc_fil='find /etc -type f'
Для вас , это может не работать без настройки, например изменение вашего параметризованного типа inode в суффикс с псевдонимом. Это просто еще один вариант того, как пользователи могут сократить фрагменты кода в целом. В любом случае, я попытался объяснить подробно на основе того, что знаю, и надеюсь, что это где-то полезно.
(Также я бы предложил переместить это в Unix / Linux SE, считая, что это идеальный вариант для вещи, которые не являются специфичными для Ubuntu?)