bash不';t按顺序运行命令

bash不';t按顺序运行命令,bash,command-substitution,Bash,Command Substitution,我有一个包含以下内容的bash脚本: MY_COMMAND="MY_PWD=`pwd`; export MY_PWD; MY_PWD_BASENAME=`basename $MY_PWD`; echo $MY_PWD_BASENAME"; export MY_COMMAND 从终端获取脚本源代码时,出现以下错误: basename: missing operand Try `basename --help' for more information. 这表示未按顺序执行MY_COMMAND中

我有一个包含以下内容的bash脚本:

MY_COMMAND="MY_PWD=`pwd`; export MY_PWD; MY_PWD_BASENAME=`basename $MY_PWD`; echo $MY_PWD_BASENAME"; export MY_COMMAND
从终端获取脚本源代码时,出现以下错误:

basename: missing operand
Try `basename --help' for more information.
这表示未按顺序执行
MY_COMMAND
中的命令。 这里发生了什么事?

下面一行:

MY_COMMAND="MY_PWD=`pwd`; export MY_PWD; MY_PWD_BASENAME=`basename $MY_PWD`; echo $MY_PWD_BASENAME"
不会执行以下命令(如您所想):

相反,它将扩大市场

并用它们的输出替换它们。由于未设置
$MY_PWD
basename
将在没有必需参数的情况下执行,如:

basename
这导致了错误


修正:我建议使用
$()
代替反勾号来替换命令。一个好处是,您可以嵌套它们:

MY_COMMAND="MY_PWD=$(pwd); export MY_PWD; MY_PWD_BASENAME=$(basename "$(pwd)"); echo $MY_PWD_BASENAME"

然而,这只是语法修复。通常我建议使用如下函数

lib.sh

使用以下功能:

#!/bin/bash
source "lib.sh"
basename_pwd

为什么希望
FOO=“cmd1;cmd2”
执行任何命令?请使用函数。不要将命令放入变量中。使用函数。@hek2mgl尝试一下,您会看到它确实执行了命令。问题是为什么不按顺序执行?明白了。谢谢
MY_COMMAND="MY_PWD=$(pwd); export MY_PWD; MY_PWD_BASENAME=$(basename "$(pwd)"); echo $MY_PWD_BASENAME"
function basename_pwd() {
    basename "$(pwd)"
}
#!/bin/bash
source "lib.sh"
basename_pwd