2016-03-04 47 views
1

我想找到一个供应相对路径的绝对路径,并使用默认的,如果没有提供一个在bash

从提供的路径找到一个绝对路径,我原本OUTPUT_PATH=${OUTP:-"/home/default/output/dir"} 我可以做 OUTPUT_PATH="$(cd "$(dirname ${OUTP})" && pwd)"得到的绝对路径

,但如果我将二者结合起来,以:

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

我得到一个坏的替代误差,这是为什么?

回答

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能够移动到指定目录)。

+0

值得注意的是'cd'命令的bash的'-L'和'-P'选项是值得的。 “绝对路径”可能意味着几件不同的事情。哦,+1“只是胡言乱语”。 :-) – ghoti