抱怨没有这样的文件或目录

时间:2013-05-18 09:50:33

标签: bash macos shell variable-expansion tilde-expansion

我是macosx上的shell编程的新手,并且有一点问题。我编写了以下shell脚本:

#!/bin/sh

function createlink {
source_file=$1

target_file="~/$source_file"

if [[ -f $target_file ]]; then
    rm $target_file
fi

ln $source_file $target_file
}

createlink ".netrc"

当我执行这个脚本时,我收到消息 ln:〜/ .netrc:没有这样的文件或目录,我不知道为什么会这样!你看到错误吗?谢谢!

1 个答案:

答案 0 :(得分:6)

问题在于tilde expansion不会发生,因为路径位于变量值中(tilde expansion发生在variable expansion之前)。您可以使用$HOME代替~来改善此问题。那是

target_file="${HOME}/${source_file}"

这可以解决您的问题。

进一步阅读:EXPANSION

man bash部分