bash脚本中的Glob模式

bash脚本中的Glob模式,bash,glob,Bash,Glob,我正在编写一个bash脚本,将一些点文件从~/.dotfiles链接到~ 我的整个脚本如下: declare -a dotfiles=( bashrc git/.gitconfig extra/* ) for dotfile in "${dotfiles[@]}"; do orig_df="$HOME/.dotfiles/$dotfile" home_df="null" # Add a dot before the name of the f

我正在编写一个bash脚本,将一些点文件从
~/.dotfiles
链接到
~

我的整个脚本如下:

declare -a dotfiles=(
    bashrc
    git/.gitconfig
    extra/*
)

for dotfile in "${dotfiles[@]}"; do

    orig_df="$HOME/.dotfiles/$dotfile"
    home_df="null"

    # Add a dot before the name of the file if it hasn't one already
    if [[ `basename "$orig_df"` == .* ]]; then
        home_df="$HOME/`basename $dotfile`"
    else
        home_df="$HOME/.`basename $dotfile`"
    fi

    # Link
    ln -s "$orig_df" "$home_df"
done
除了(猜猜看)在
extra/*
中的globbing外,其他一切都正常

我如何扩展它?到目前为止,它创建了如下链接:

~/.*  # linked to -> ~/.dotfiles/extra/*

(因为我告诉它在没有点的情况下加前缀)。

在分配变量时,通配符应该展开,除非它与任何内容都不匹配。什么变量<代码>点文件或
源文件
?因为当它第一次看到
dotfiles
时,它不知道我在说什么
extra/
目录。
extra/*
将在您分配
dotfiles
时相对于当前目录展开,因为您没有将glob放在引号中。如果省略分配给
orig_df
的引号,则会展开通配符。