如何在变量中使用source?

时间:2016-04-22 18:51:07

标签: bash

我尝试了多种方法让它工作,但没有去:我只想在源命令中使用$ path。

#!/bin/bash

path="~/root/config/bash/"

source ~/root/config/bash/_private.sh
source ~/root/config/bash/config.sh

3 个答案:

答案 0 :(得分:3)

Tilde(~)在放入引号内的路径中将在字面上处理,在变量声明中,因此source $path将不起作用。

你可以:

  • 使用eval(小心):

    source "$(eval echo $path)"
    
  • 或使用字母完整路径:

    path=/home/user/root/config/bash/
    
  • 或者,如果用户与登录用户相同,请使用$HOME

    path="$HOME"/root/config/bash/
    
  • 或者保持~ outside of quotes

答案 1 :(得分:2)

path=~/"root/config/bash/"
source "$path"

答案 2 :(得分:1)

在命令将它们视为参数之前,shell会扩展Bash参数。

source "$path"就是你所需要的。

除非你正在谈论将它用作前缀,在这种情况下,你可以这样做:

source "${path}/_private.sh"

但是,如果您正在讨论使用$ path,就好像它是$ PATH一样,如果在其他地方找不到它们就让它查找文件,那就需要自定义逻辑。