Bash中%%〜nxD的等价物是什么?
问题描述:
我正在将一些批处理脚本转换为bash脚本来在Linux上构建项目,并且我需要将%%~nxD
转换为Bash。它用于以下形式:Bash中%%〜nxD的等价物是什么?
FOR %%D IN ("%SOURCE_DIR%\..\..") DO SET "ProjName=%%~nxD"
如果任何人都可以阐明这一点,它将不胜感激。
答
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
为##
- 这将直接导致你的字符串扩展说明)
的选项之间的主要区别是:
- 首先是丑陋的,但IME最可靠的,并感谢可以使用
pwd
来解析符号链接。 (还允许进行错误检查。) - 第二个模拟
../..
调用嵌套的dirname
调用。 - 第三个与第二个相同,但速度更快,因为它不使用这些命令,而是使用字符串扩展。但它有一个缺陷,如果
$SOURCE_DIR
结尾冗余/
,它可能无法按预期方式工作。
答
猜测,因为你没有添加它在DOS中所做的,你想要父目录?
var=${PWD%*/}
如果它是当前目录,没有路径
var=${PWD##/*}
它在批处理中做了什么? – 123
请问在DOS /批处理中如何使用另一种语言来完成它。 – SaintHax
http://batsh.org提供了在bat-> sh和sh-> bat之间进行转换的一些功能。它将你的'VarName = ....'标记为有语法错误。 *可能*如果你粘贴整个脚本,你会得到更好的结果。祝你好运。 – shellter