函数用了之后变量输出也变了

function create_path_do()
{
    if [ ! -d $1 ]; then
        mkdir $1
    fi
}

function create_path()
{
    IFS='/'
    arr=($1)
    for s in ${arr[@]}
    do
        if [ "$s" = "" ]; then
            continue;
        else
            p=$p/$s
            create_path_do $p
        fi
    done
}


m=$(date +%Y%m)
t=$(date +%Y%m%d%H%M%S)
filename=$t.sql
filepath=/home/wwwbaks/aps/$m
filepath_name=$filepath/$filename
echo $filepath_name
create_path $filepath

echo $filepath_name

输出结果为:

/home/wwwbaks/aps/201412/20141203043459.sql
 home wwwbaks aps 201412 20141203043459.sql

感谢修改之后的函数

function create_path()
{
    oldifs=$IFS
    IFS=/
    arr=($1)
    IFS=$oldifs
    for s in ${arr[@]}
    do
        if [ "$s" = "" ]; then
            continue;
        else
            p=$p/$s
            if [ ! -d $p ]; then
                mkdir $p
            fi
        fi
    done
}
阅读 3.1k
1 个回答

原因在于你这个 IFS

由于调用了 create_path 这个 function, IFS 仍然为 "/",因此解决办法就是恢复原来的 IFS:

# Save
local oldifs=$IFS

# function body here
# ...

# Restore
IFS=$oldifs
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进