当前位置:  开发笔记 > 编程语言 > 正文

bash不按顺序运行命令

如何解决《bash不按顺序运行命令》经验,为你挑选了1个好方法。

我有一个包含以下内容的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不按顺序执行.这里发生了什么?



1> hek2mgl..:

以下行:

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建议的功能

lib.sh

function basename_pwd() {
    basename "$(pwd)"
}

使用功能:

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

推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有