这是我的脚本,我希望在其中按用户接收参数--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/