我正在努力将一些批处理脚本转换为bash脚本以在Linux上构建项目,我需要将%%~nxD
转换为Bash。它以下列形式使用:
FOR %%D IN ("%SOURCE_DIR%\..\..") DO SET "ProjName=%%~nxD"
如果有人能够对此有所了解,那将非常感激。
答案 0 :(得分:3)
FOR %%D IN ("%SOURCE_DIR%\..\..") DO SET "ProjName=%%~nxD"
(假设是找到SOURCE_DIR
变量的第三个路径组件。)
在bash中,这可能是这样的:
ProjName=$(basename `(cd $SOURCE_DIR/../..; pwd)`)
(cd
- 更改为目录pwd
- 打印当前目录basename
- 获取名称的最后一个组成部分。)
可替换地:
ProjName=$(basename $(dirname $(dirname $SOURCE_DIR)))
(使用dirname
删除两个路径组件,然后使用basename
获取最后一个组件。)
或者,没有额外的命令(快速,但丑陋):
TEMP1=${SOURCE_DIR%/*/*}
ProjName=${TEMP1##*/}
(与之前相同,但使用bash'内置字符串扩展。搜索man bash
##
- 它会直接引导您进行字符串扩展说明。)
选项之间的主要区别是:
pwd
可以用来解析符号链接。 (也允许错误检查。)../..
嵌套dirname
来电。$SOURCE_DIR
以冗余/
结尾,则可能无法正常工作。答案 1 :(得分:0)
猜猜,因为你没有在DOS中添加你想要父目录的内容吗?
var=${PWD%*/}
如果它是当前目录,则没有路径
var=${PWD##/*}