问题
我有一个脚本,它接受一些不同的(可选)命令行参数。对于一个特定的参数,我得到的值“较少”出现,但我不知道为什么。
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
(或如果设置,则为)。这将覆盖 配置选项(请参阅下面的“配置机制”部分)。$PAGER
pager.<cmd>
如果您的脚本以其他含义使用该变量,而不是保存要通过管道输出的程序的名称,那么为了清楚起见,我建议使用其他名称。无论如何,请记住周围的环境可以传入任何变量,因此如果您想确保变量为空,则必须显式为其分配空字符串。或者unset
它,如果你想取消设置的话。
尽管这是您需要做出的决定。一些用户可能会欣赏通过环境传递配置项的可能性。