Используйте встроенную команду
для вызова внешней команды, минуя любую функцию с тем же именем. Также:
, если
- обычная команда. Чтобы выполнить сравнение строк, вызовите встроенный тест
или встроенный [
с тем же синтаксисом плюс последний ]
или [ […]]
конструкция с более упрощенным синтаксисом. См. с использованием одинарной или двойной скобки - bash для получения дополнительной информации. -eq
предназначен для сравнения целых чисел. Используйте =
для сравнения строк. -p
). Ниже я вызываю cd
только в случае успеха mkdir
и вызываю его по последнему аргументу, переданному функции. -g
будет распознан только как самый первый аргумент. Возможны варианты синтаксического анализа для обнаружения и удаления его из любого положения, но сложнее. mkdir () {
local do_cd=
if [ "$1" = "-g"]; then
do_cd=1
shift
fi
command mkdir "$@" &&
if [ -n "$do_cd" ]; then
eval "cd \"\${$#}\""
fi
}
Я не рекомендую определять ваши собственные параметры. Они не будут показаны в - справке
или на страницах руководства.Они не более запоминаются, чем определение команды с другим именем: либо вы не помните, что они у вас есть, и нет никаких преимуществ по сравнению с командой с другим именем, либо вы не помните, что они настраиваемые. , а затем вы можете сразу узнать это с помощью настраиваемого имени, спросив оболочку, является ли это встроенной командой или функцией ( type mkcd
), чего нельзя сказать о настраиваемой опции. Есть варианты использования для переопределения стандартной команды, но это не так.