我在这样的文件夹中有一个文件:
installer-x86_64-XXX.XX-diagnostic.run
其中XXX.XX是版本号,我只需要版本号.怎么在linux中做到这一点?
我有这个代码:
#!/bin/bash
current_ver=$(find /mnt/builds/current -name '*.run'|awk -F/ '{print $NF}')
Run Code Online (Sandbox Code Playgroud)
所以这给了我正确的文件名称(减去我不想要的位置).
但是,我如何才能将XXX.XX版本号转换为变量,例如 $version
您实际上不需要任何外部工具.您可以通过根据模式切割变量来完全在bash中完成此操作.
[ghoti@pc ~]$ name="installer-x86_64-XXX.XX-diagnostic.run"
[ghoti@pc ~]$ vers=${name#*-}; echo $vers
x86_64-XXX.XX-diagnostic.run
[ghoti@pc ~]$ vers=${vers#*-}; echo $vers
XXX.XX-diagnostic.run
[ghoti@pc ~]$ vers=${vers%-*}; echo $vers
XXX.XX
[ghoti@pc ~]$
Run Code Online (Sandbox Code Playgroud)
或者如果你愿意,你可以先右手砍掉碎片:
[ghoti@pc ~]$ name="installer-x86_64-XXX.XX-diagnostic.run"
[ghoti@pc ~]$ vers=${name%-*}; echo $vers
installer-x86_64-XXX.XX
[ghoti@pc ~]$ vers=${vers##*-}; echo $vers
XXX.XX
[ghoti@pc ~]$
Run Code Online (Sandbox Code Playgroud)
当然,如果你想使用外部工具,那也没关系.
[ghoti@pc ~]$ name="installer-x86_64-XXX.XX-diagnostic.run"
[ghoti@pc ~]$ vers=$(awk -F- '{print $3}' <<<"$name")
[ghoti@pc ~]$ echo $vers
XXX.XX
[ghoti@pc ~]$ vers=$(sed -ne 's/-[^-]*$//;s/.*-//;p' <<<"$name")
[ghoti@pc ~]$ echo $vers
XXX.XX
[ghoti@pc ~]$ vers=$(cut -d- -f3 <<<"$name")
[ghoti@pc ~]$ echo $vers
XXX.XX
[ghoti@pc ~]$
Run Code Online (Sandbox Code Playgroud)
你要:
awk -F"-" '{ print $3 }'
Run Code Online (Sandbox Code Playgroud)
与-F您指定分隔符。在这种情况下,-。版本号是第三个字段,所以这就是为什么你需要$3.