bash 脚本:设置了不正确的参数值

bash 脚本:设置了不正确的参数值

问题

我有一个脚本,它接受一些不同的(可选)命令行参数。对于一个特定的参数,我得到的值“较少”出现,但我不知道为什么。

bash代码

while getopts ":d:f:p:e:" o; do
  case "${o}" in
        d)
            SDOMAIN=${OPTARG}
            ;;
        f)
            FROM=${OPTARG}
            ;;
        p)
            PAGER=${OPTARG}
            ;; 
        e)
            DESTEXT=${OPTARG}
            ;;                       
        *)
            show_usage
            ;;          
    esac
done

source "./utils.sh"
test #test includes

echo "$SDOMAIN is the sdomain"
echo "$FROM is the from"
echo "$PAGER is the pager"
echo "$DESTEXT is the extension"

exit

输出

当我运行脚本时,我看到的是:

lab-1:/tmp/jj# bash mssp.sh -d testdomain.net         
Utils include worked!                                       
testdomain.net is the sdomain                                               
 is the from                                                                    
less is the pager                                                               
 is the extension                                 

我不明白为什么我在寻呼机中得到“较少”的值。我希望看到空字符串。如果您看到我的错误,请告诉我。我已经看这个太久了。

答案1

您的脚本永远不会设置 PAGER,但该变量可能是从您当前的环境中导出的;检查与declare -p PAGER.

我建议在脚本中使用不同的变量名称;这就是为什么一般建议不要使用大写变量作为您自己的变量。

答案2

PAGER是常用的环境变量(如EDITOR)。手册页中提到的一些示例:

男人(尽管它优先考虑MANPAGER):

-P pager, --pager=pager
指定要使用的输出寻呼机。默认情况下,man使用pager.该选项会覆盖$MANPAGER环境变量,环境变量又会覆盖$PAGER环境变量。

git:

-p, --paginate
如果标准输出是终端, 则将所有输出通过管道传输到less(或如果设置,则为)。这将覆盖 配置选项(请参阅下面的“配置机制”部分)。$PAGERpager.<cmd>

如果您的脚本以其他含义使用该变量,而不是保存要通过管道输出的程序的名称,那么为了清楚起见,我建议使用其他名称。无论如何,请记住周围的环境可以传入任何变量,因此如果您想确保变量为空,则必须显式为其分配空字符串。或者unset它,如果你想取消设置的话。

尽管这是您需要做出的决定。一些用户可能会欣赏通过环境传递配置项的可能性。

相关内容