在命令别名中读取环境变量会导致对其进行评估吗?

在命令别名中读取环境变量会导致对其进行评估吗?

我有用于写入日志文件的简单别名(这是我的 .profile 文件中的内容):

logtee() {
    ${TEST_LOG_FOLDER:?"empty_log_folder"}
    tee -a $TEST_LOG_FOLDER/$1
}

我正在从环境变量中读取文件夹(因此该变量保存的值类似​​于“d/my/logs”)。但是,当我尝试通过执行来使用此别名时,echo 'this is reading path from env.variable!' | logtee whatever.log它可以工作,但输出是:sh.exe": /d/my/log/path: is a directory
我做错了什么吗?为什么读取环境变量会对其进行评估?我怀疑这与它是一个别名有关,因为在通常的 .sh 脚本中,类似的代码可以正常工作。PS
我在 Windows 7 上使用 msysgit,这可能是问题所在?

答案1

函数的第一行确实在对其进行求值。您可以将其替换为:

echo ${TEST_LOG_FOLDER:?"empty_log_folder"} > /dev/null

更好的解决方案是:

[ -d "${TEST_LOG_FOLDER:?'empty_log_folder'}" ] && \

最好的解决方案是不使用单独的行,因此整个函数变成:-

logtee() {
    tee -a "${TEST_LOG_FOLDER:?'empty_log_folder'}/$1"
}

$TEST_LOG_FOLDER请注意,我已更改了引用,以防或中有空格$1

相关内容