以下行:
MY_COMMAND="MY_PWD=`pwd`; export MY_PWD; MY_PWD_BASENAME=`basename $MY_PWD`; echo $MY_PWD_BASENAME"
不会执行以下命令(如您所想):
MY_PWD=`pwd`
export MY_PWD
MY_PWD_BASENAME=`basename $MY_PWD`
echo $MY_PWD_BASENAME"
相反,它将扩展命令替换
`pwd`
`basename $MY_PWD`
并用它们的输出替换它们。由于$MY_PWD
未设置,basename
将在没有所需参数的情况下执行,例如:
basename
这会导致错误。
修复:我建议使用$()
而不是反引号来替换命令。一个好处是您可以嵌套它们:
MY_COMMAND="MY_PWD=$(pwd); export MY_PWD; MY_PWD_BASENAME=$(basename "$(pwd)"); echo $MY_PWD_BASENAME"
但是,这只是语法修复。一般来说,我建议使用@chepner 建议的功能
库文件
function basename_pwd() {
basename "$(pwd)"
}
使用功能:
#!/bin/bash
source "lib.sh"
basename_pwd