从bash中提供的路径查找绝对路径

从bash中提供的路径查找绝对路径,bash,Bash,我试图找到提供的相对路径的绝对路径,如果没有提供,则使用默认路径 最初我有OUTPUT\u PATH=${OUTP:-“/home/default/OUTPUT/dir”} 我能行 OUTPUT_PATH=“$(cd“$(dirname${OUTP})”&&pwd)”获取绝对路径 但如果我将两者结合起来: OUTPUT_PATH=${"$( cd "$(dirname ${OUTP})" && pwd)":-"/home/default/output/dir"} 我的换人失误很

我试图找到提供的相对路径的绝对路径,如果没有提供,则使用默认路径

最初我有
OUTPUT\u PATH=${OUTP:-“/home/default/OUTPUT/dir”}
我能行
OUTPUT_PATH=“$(cd“$(dirname${OUTP})”&&pwd)”
获取绝对路径

但如果我将两者结合起来:

OUTPUT_PATH=${"$( cd "$(dirname ${OUTP})" && pwd)":-"/home/default/output/dir"}
我的换人失误很严重,为什么

表示法
${varname:-default}
表示“替换名为
varname
的变量的值,如果该变量已设置且非空;否则,替换字符串
default

在您的例子中,
“$(cd”$(dirname${OUTP})”和&pwd)
不是变量的名称,因此
${$(cd”$(dirname${OUTP})”和&pwd):-“/home/default/output/dir”}
没有使用上述符号;这只是胡说八道

而且,
dirname
调用对我来说没有意义;我认为您可能误解了该实用程序的功能

总的来说,我认为你想要的是:

OUTPUT_PATH="$(cd "${OUTP:-/home/default/output/dir}" && pwd)"

之后还需要进行一些错误检查,以确保实际设置了
$OUTPUT\u PATH
(即
cd
能够移动到指定目录)。

值得注意的是bash的
-L
-p
选项用于
cd
命令。“绝对路径”可能意味着两种不同的东西。哦,还有+1表示“胡言乱语”。-)