Bash中%%~nxD的等效值是什么?
我正在将一些批处理脚本转换为bash脚本,以便在Linux上构建一个项目,我需要将Bash中%%~nxD的等效值是什么?,bash,batch-file,Bash,Batch File,我正在将一些批处理脚本转换为bash脚本,以便在Linux上构建一个项目,我需要将%%~nxD转换为bash。它以以下形式使用: FOR %%D IN ("%SOURCE_DIR%\..\..") DO SET "ProjName=%%~nxD" 如果有人能解释一下这一点,我们将不胜感激。猜测一下,因为您没有添加在DOS中您想要的父目录是什么 var=${PWD%*/} 如果是当前目录,则没有路径 var=${PWD##/*} (假设这是为了找到SOURCE\u DIR变量的第三个路径组件
%%~nxD
转换为bash。它以以下形式使用:
FOR %%D IN ("%SOURCE_DIR%\..\..") DO SET "ProjName=%%~nxD"
如果有人能解释一下这一点,我们将不胜感激。猜测一下,因为您没有添加在DOS中您想要的父目录是什么
var=${PWD%*/}
如果是当前目录,则没有路径
var=${PWD##/*}
(假设这是为了找到SOURCE\u DIR
变量的第三个路径组件。)
在bash中,这可能如下所示:
ProjName=$(basename `(cd $SOURCE_DIR/../..; pwd)`)
(cd
-切换到目录,pwd
-打印当前目录,basename
-获取名称的最后一个组件。)
或者:
ProjName=$(basename $(dirname $(dirname $SOURCE_DIR)))
(使用dirname
剥离两个路径组件,然后使用basename
提取最后一个组件)
或者,如果没有额外的命令(快速但丑陋):
(与前面相同,但使用bash内置的字符串扩展。搜索manbash
以查找##
——它将直接引导您找到字符串扩展描述。)
两种方案之间的主要区别是:
- 第一个是丑陋的,但IME是最可靠的,多亏了
可以用来解析符号链接。(还允许进行错误检查。)pwd
- 第二个使用嵌套的
调用模拟dirname
。/..
- 第三个与第二个相同,但速度更快,因为它不使用命令,而是使用字符串扩展。但它有一个缺陷,即如果
以冗余的$SOURCE\u DIR
结尾,它可能无法按预期工作/
VarName=..
标记为存在语法错误。也许如果你把整个脚本粘贴到那里,你会得到更好的结果。祝你好运。这是我试图转换的批处理文件中的一行。对于%%D IN(“%SOURCE\u DIR%\..\”)设置“ProjName=%%~nxD”是的,我们猜到了,但需要一个既知道(a)批处理意味着什么,又知道(b)如何在bash中编写它的人-我们认为您至少可以提供其中的前半部分?
ProjName=$(basename $(dirname $(dirname $SOURCE_DIR)))
TEMP1=${SOURCE_DIR%/*/*}
ProjName=${TEMP1##*/}