gpt4 book ai didi

bash - bash 中的 SED 用于接收参数

转载 作者:行者123 更新时间:2023-11-29 09:36:14 24 4
gpt4 key购买 nike

这是我的脚本,我想在其中接收用户的参数 --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(这是一个外部命令)的原因。

通常,您应该避免为自己的脚本变量使用 ALL_UPPERCASE 名称,因为其中许多 ALL_UPPERCASE 变量通常已被 shell 或系统保留/已使用。


你说你在 Windows 上运行这个。我相信环境变量在 Windows 上不区分大小写,因此即使使用 path 也可能无济于事。您可能需要为变量选择不同的名称,例如 my_path

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com