Я не думаю, что это проблема с вашей функцией (или, точнее, я не думаю, что это проблема, которую вы можете решить с помощью своей функции). bash анализирует командную строку (включая интерпретацию строк в кавычках, различные выражения в скобках и т. д.) перед вызовом вашей функции, прежде чем он даже решит вызвать вашу функцию. Поэтому, когда вы набираете что-то вроде gc fixed Greg's bug
, bash потребует, чтобы вы закрыли строку в кавычках, прежде чем она выполнит функцию; когда вы gc printf("%s", integervar) not a good idea
, bash будет жаловаться на круглые скобки и никогда даже не решит, какая команда / функция / что бы ни запрашивалась.
Я предполагаю, что смысл использования $*
состоял в том, чтобы не заключать в кавычки памятку в командной строке, но это исключает необходимость заключать в сообщение пробелы. Если сообщение содержит другие метасимволы оболочки, вы должны заключить их в кавычки или экранировать их соответствующим образом:
gc "fixed Greg's bug"
gc 'printf("%s", integervar) not a good idea'
gc 'fixed this & deferred that'