如何在 shell 脚本中指定变量中提到的文件夹的兄弟文件夹?

How to specify a sibling folder of a folder mentioned in a variable in a shell script?

我有一个文件夹路径存储在变量 ${PROJECT_DIR} 中。 我想向上导航到它的父文件夹,然后向下导航到名为 "Texture Packer" 的文件夹,即 ${PROJECT_DIR} 和 "Texture Packer" 是兄弟姐妹。 我如何在 shell 脚本中指定它? 到目前为止我有:

TP=/usr/local/bin/TexturePacker

# create all assets from tps files
${TP} "${PROJECT_DIR}/../Texture Packer/*.tps"

但这是不正确的,因为 Texture Packer 无法检测路径中的文件。错误信息显示:

TexturePacker:: error: Can't open file /Users/john/Documents/MyProj/proj.ios_mac/../Texture Packer/*.tps for reading: No such file or directory

编辑:以下似乎有效但不干净:

#! /bin/sh
TP=/usr/local/bin/TexturePacker
if [ "${ACTION}" = "clean" ]
then
    # remove sheets - please add a matching expression here
    # Some unrelated stuff
else
    cd ${PROJECT_DIR}
    cd ..
    cd "Texture Packer"

    # create all assets from tps files
    ${TP} *.tps
fi
exit 0

你走在正确的轨道上;问题是通配符(如 *.tps)在引号中时不会展开。解决方案是将那部分路径留在引号之外:

${TP} "${PROJECT_DIR}/../Texture Packer"/*.tps

顺便说一句,我几乎总是建议不要在脚本中使用 cd。很容易忘记当前目录在脚本中的不同位置的位置,或者发生错误并且脚本的其余部分在错误的位置运行,或者......此外,您正在使用的任何相对路径(例如,用户提供的参数)每次 cd 时都会改变含义。基本上,这是让事情变得异常错误的机会。