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

时间:2016-03-04 16:08:04

标签: bash

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

最初我有OUTPUT_PATH=${OUTP:-"/home/default/output/dir"} 我可以 OUTPUT_PATH="$( cd "$(dirname ${OUTP})" && pwd)"获取绝对路径

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

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

我得到了一个糟糕的替换错误,为什么会这样?

1 个答案:

答案 0 :(得分:3)

${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_PATH实际设置(即cd能够移动到指定目录)。