【发布时间】:2017-12-20 21:26:39
【问题描述】:
在我的 bash 脚本中,我经常提示用户回答是/否。由于我经常在一个脚本中多次使用它,我希望有一个函数来检查用户输入是否是是/否的某种变体,然后将此答案清除为“y”或“n”。像这样的:
yesno(){
temp=""
if [[ "$1" =~ ^([Yy](es|ES)?|[Nn][Oo]?)$ ]] ; then
temp=$(echo "$1" | tr '[:upper:]' '[:lower:]' | sed 's/es//g' | sed 's/no//g')
break
else
echo "$1 is not a valid answer."
fi
}
然后我想使用如下函数:
while read -p "Do you want to do this? " confirm; do # Here the user types "YES"
yesno $confirm
done
if [[ $confirm == "y" ]]; then
[do something]
fi
基本上,我想将第一个参数的值更改为$confirm 的值,这样当我退出yesno 函数时,$confirm 要么是“y”,要么是“n”。
我尝试在 yesno 函数中使用 set -- "$temp",但无法正常工作。
【问题讨论】:
-
这似乎是一个 X-Y 问题——问题是关于提议的解决方案,而不是 OP 实际上想要使用该解决方案来解决的问题。接受的答案在外部范围内根本不会改变
"$1",因此将其作为搜索结果的其他人可能会感到困惑——也许应该编辑问题以更准确地描述真实/直接的问题? -
...也就是说,根据原始标题,我会认为OP想知道如何更改
$1本身,而不是命名的变量的值$1的内容。