Те, що ви запитуєте, насправді не має великого сенсу.
ключове слово означає, що це слово, яке є частиною синтаксису оболонки. Вони розпізнаються за допомогою маркірування. Цитування їх достатньо, щоб оболонка перестала розпізнавати.
Хоча ключове слово в більшості оболонок можливо. Отже, псевдоніми мають перевагу над ключовими словами (фактично вони розгортаються рано, а після цього є більше маркірування, де ви можете мати більше псевдонімів, ключових слів) ...
псевдоніми (за винятком zsh псевдонімів, визначених з alias -g, розширені лише в командному положенні), тому зазвичай не в builtin the-alias.
функції мають перевагу над вбудованими, а вбудовані над зовнішніми командами (а потім $PATHвирішують, яку використовувати).
Ви можете примусити вбудований за допомогою:
builtin the-cmd and its args
(хоча слід зазначити, що це не стандартна команда).
Ви можете вимкнути псевдоніми, цитуючи їх (хоча версія, що цитується, також може бути псевдонімом у деяких оболонках).
Так, наприклад (тут синтаксис zsh) у:
'while'() echo function while
alias 'while=echo alias while'
Написання while trueфактично виводить alias while true, і не було б можливості використовувати whileключове слово, оскільки його цитування відключить псевдонім і ключове слово.
Ви б назвали цю whileфункцію, наприклад:
'whi'le whatever
Якби був whileвбудований (але, звичайно, їх не було б у тих оболонках, які мають whileключове слово), ви напишете це:
builtin while whatever
А щоб викликати whileкоманду, ви напишете:
env while whatever
або в zsh(якщо не в shемуляції):
command while whatever
(в інших оболонках commandлише запобігає функціям, а не вбудованим)
Або
/full/path/to/while whatever
Звичайно, ніщо не заважає тобі робити навіть дурніші речі, такі як:
alias 'while=while "w"hile; do'
"while"() { while "whi"le; done; }
Що, принаймні, в zsh є дійсним (але дурним).
commandпригнічує пошук функції, але жоден з них не вказує, який із решти синонімів буде використовуватися. Я шукаю спосіб вказати виконання лише певного синоніма.