这是我的脚本,我希望在其中按用户接收参数--path和--mode,例如:
./myscript.sh--path=/hello--mode=a
脚本

#!/usr/bin/env bash

set -e

HELP=false
MODE=false
PATH=false

for arg in "$@"
do
    case "$arg" in
        -h|--help)
            HELP=true
            ;;
        --mode*)
            MODE=`echo $arg | sed -e 's/^[^=]*=//g'`
            ;;
        --path*)
            PATH=`echo $arg | sed -e 's/^[^=]*=//g'`
            ;;
        *)
            echo "wrong argument: $arg"
            echo "type --help for supported parameters"
            exit 1
        ;;

    esac
done

当我尝试执行时,收到以下错误:
line 19: sed: command not found

怎么了?

最佳答案

PATH=false

这行代码会破坏您的PATH变量。PATH是shell查找要运行的所有命令的位置。(外部命令,即内置shell命令、函数和别名不受影响。)
通常它包含PATH=/usr/local/bin:/usr/bin:/bin这样的内容。通过将它设置为false,您可以告诉BASH搜索命令(不存在)目录false
这就是为什么找不到sed(这是一个外部命令)。
一般来说,您应该避免为自己的脚本变量使用所有大写的名称,因为这些所有大写的变量中有许多是shell或系统通常保留/已经使用的。
你说你在Windows上运行这个。我相信环境变量在Windows上是不区分大小写的,所以即使使用path也没有帮助。您可能必须为变量选择不同的名称,例如my_path

关于bash - bash中的SED,用于接收参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47184474/

10-16 11:07