Bash-opdracht om het verschil tussen variabelen te herkennen

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?

0
задан 16 December 2020 в 18:09

2 ответа

Самым простым решением является злоупотребление тем фактом, что цифры ставятся перед буквами во всех основных кодировках символов. Просто разделите строку на несколько строк, отсортируйте строки, затем объедините строки обратно в одну строку.

#!/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
1
ответ дан 3 January 2021 в 22:46

Вы можете попробовать следующее:

arg1="$1"
arg2="$2"

[[ "$arg1" =~ ^[0-9]+$ ]] && echo "$arg1 $arg2" ||
  echo "$arg2 $arg1"
1
ответ дан 3 January 2021 в 22:46

Другие вопросы по тегам:

Похожие вопросы: