Ik krijg van stdin 2 variabelen een naam en een nummer in willekeurige volgorde. Hoe kan ik ze correct identificeren in een bash-script zodat ik ze in een bestand in dezelfde volgorde kan afdrukken (leeftijd, naam)
./a.sh Fred 18
./a.sh 17 Barbie
uitvoerbestand
18 Fred
17 Barbie
Ik weet niet hoe ik het sed-commando correct of regex kan gebruiken kunt u daarvoor alstublieft helpen?
Самым простым решением является злоупотребление тем фактом, что цифры ставятся перед буквами во всех основных кодировках символов. Просто разделите строку на несколько строк, отсортируйте строки, затем объедините строки обратно в одну строку.
#!/bin/bash
printf '%s\n' "$@" | sort | xargs echo
Вывод:
$ ./a.sh Fred 18
18 Fred
$ ./a.sh 17 Barbie
17 Barbie
Это работает даже для имен из нескольких слов, но тогда вы должны заключить имя в кавычки, чтобы sort
не менял порядок слов.
$ ./a.sh "Fred Astaire" 18
18 Fred Astaire
$ ./a.sh Fred Astaire 18
18 Astaire Fred
Вы можете попробовать следующее:
arg1="$1"
arg2="$2"
[[ "$arg1" =~ ^[0-9]+$ ]] && echo "$arg1 $arg2" ||
echo "$arg2 $arg1"