bash:有意义的唯一id生成

时间:2017-09-12 09:37:47

标签: linux bash pid uniqueidentifier unique-id

我使用以下命令为我的shell脚本生成一个唯一的id。我想在不使用硬盘上的任何中间文件的情况下捕获变量中的输出。

    echo `dmidecode –t 4 -s system-uuid`-$$-$BASH_SUBSHELL-$BASHPID-`date '+%Y%m%d_%H%M_%S_%N'` | tr '-' '_'
    XXB3A1XX_81XX_4XX2_AXX4_XXXX62820BF_24115_0_8550_201709XX_1446_46_385924883

我可以使用反引号或$()构造,但这样做会改变$ BASH_SUBSHELL的值并稀释唯一id的值。

欢迎任何不使用硬盘的解决方案,并且在捕获变量中的输出时不会更改$ BASH_SUBSHELL值。

注意:示例中的结果部分被X

遮挡

2 个答案:

答案 0 :(得分:1)

使用printf并将变量保存为格式字符串:

format="%s-$$-$BASH_SUBSHELL-$BASHPID-%s"
uuid=$(printf "$format" $(dmidecode –t 4 -s system-uuid) $(date '+%Y%m%d_%H%M_%S_%N') | tr - _)

然后:

$ echo "$uuid"
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX_11764_0_11764_20170912_1906_42_765827138
$ echo `dmidecode –t 4 -s system-uuid`-$$-$BASH_SUBSHELL-$BASHPID-`date '+%Y%m%d_%H%M_%S_%N'` | tr '-' '_'
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX_11764_0_11865_20170912_1909_28_405748643

答案 1 :(得分:0)

uuidgen 适用于 Linux (util-linux) 和 Mac OS(BSG 通用命令)。

https://serverfault.com/questions/103359/how-to-create-a-uuid-in-bash