我为windows创建了一个批处理文件,用于执行一些xmlstarlet命令。我想把它写成.sh文件,以便我可以在mac上运行它。问题是..有些命令在Windows中工作正常,但在mac中没有。它也没有显示任何错误。例如
**xml ed -L -d //intent-filter//category[@android:name='android.intent.category.LAUNCHER'] my_folder\AndroidManifest.xml**
在windows中,上面的命令会删除提到的xml标记。它在mac中没有任何作用。 但命令
**xml sel -t -m //manifest -v //manifest/@package mim_apk_proj\AndroidManifest.xml**
在mac和windows中都运行正常。 我已经安装了xml工具。检查/ usr / local / bin。它有libxslt.dylib和libxml2.dylib。我不知道问题在哪里? 有人可以帮忙吗?
答案 0 :(得分:0)
bash的引用规则(这是你的mac上的shell,对吗?)与cmd.exe(Windows shell)不同,特别是cmd.exe将'
视为普通字符而bash它是一个引用字符,因此它不会传递给程序。因此,在bash中你需要引用'
:
xml ed -L -d //intent-filter//category[@android:name='android.intent.category.LAUNCHER'] my_folder\AndroidManifest.xml
# becomes
xml ed -L -d "//intent-filter//category[@android:name='android.intent.category.LAUNCHER'] my_folder\AndroidManifest.xml"
# or, since XPath treats both kinds of quotes identically you can also use
xml ed -L -d '//intent-filter//category[@android:name="android.intent.category.LAUNCHER"] my_folder\AndroidManifest.xml'
第二个修复更安全,因为它还可以防止bash在使用$
时进行任何变量扩展,但第一个修复也具有在Windows中工作的优势。