Учитывая строковое представление произвольного Bash " простая команда ", как я могу разбить его на массив, содержащий его отдельные "части", то есть имя команды и отдельные параметры, , как сама оболочка (т. е. Readline) будет разбивать ее при ее анализе и принятии решения, какой исполняемый файл / функцию запустить и какие параметры передать?
Мой конкретный вариант использования требует анализа пользовательских определений псевдонимов. Например. псевдоним может быть определен как:
alias c2="cut -d' ' -f2" # just an example... arbitrary commands should be handled!
И вот как мой bash-скрипт попытается его проанализировать:
alias_name="c2"
alias_definition=$(alias -p | grep "^alias $alias_name=") # "alias c2='cut -d'\'' '\'' -f2'"
alias_command=${alias_definition##alias $alias_name=} # "'cut -d'\'' '\'' -f2'"
alias_command=$(eval "echo $alias_command") # "cut -d' ' -f2"
alias_parts=($alias_command) # WRONG - SPLITS AT EVERY WHITESPACE!
echo "command name: ${alias_parts[0]}"
for (( i=1; i <= ${#alias_parts}; i++ )); do
echo "parameter $i : ${alias_parts[$i]}"
done
Выход:
command name: cut
parameter 1 : -d'
parameter 2 : '
parameter 3 : -f2
Желаемый выход:
command name: cut
argument 1 : -d' '
argument 2 : -f2
Чем мне нужно заменить строку alias_parts=($alias_command)
, чтобы добиться этого?