Bash 命令识别变量之间的差异

Bash 命令识别变量之间的差异

我从 stdin 2 个变量中获得了以任意顺序给出的名称和数字。如何在 bash 脚本中正确识别它们,以便我可以按相同顺序(年龄、姓名)将它们打印在文件中

./a.sh Fred 18 
./a.sh 17 Barbie

输出文件

18 Fred
17 Barbie

我不知道如何正确使用 sed 命令或正则表达式来做到这一点,请您帮忙吗?

答案1

最简单的解决方案是利用所有主要字符编码中数字位于字母之前的这一事实。只需将字符串拆分为多行,对行进行排序,然后将这些行合并为一行即可。

#!/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

答案2

您可以尝试以下操作:

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

[[ "$arg1" =~ ^[0-9]+$ ]] && echo "$arg1 $arg2" ||
  echo "$arg2 $arg1"

相关内容