我需要找出问题出在哪里。我需要编写一个脚本来提示用户在 if/else 语句中做出是/否选择。一般来说,我有一个像这样运行的 bash 脚本
if CONDITION; then
COMMANDS1
else
COMMANDS2
echo "Does this look okay to you? (WARNING: This action will not be recoverable!) :
PS3="Select a number: "
select yn in "Yes" "No"
do
case $yn in
"Yes" )
echo "Ok!" ; break ;;
"No" )
echo "Aborted!" ; break ;;
esac
done
fi
但是当我运行脚本时,它显示
Does this look okay to you? (WARNING: This action will not be recoverable!)
1) Yes
2) No
Select a number: (I have to press anything here)
Select a number: (Only this input does something).
我使用 sh -vx 运行脚本,它显示它分别运行 select 和 case。如何确保我只需要一项输入?
+ echo 'Does this look okay to you? (WARNING: This action will not be recoverable!) : '
Does this look okay to you? (WARNING: This action will not be recoverable!) :
+ PS3='Select a number: '
+ select yn in '"Yes"' '"No"'
1) Yes
2) No
Select a number: 1
+ case "$yn" in
Select a number: 2
+ case "$yn" in
+ echo 'Aborted!'
Aborted!
+ break
非常感谢!
编辑:我在 Mac OS 14.1 上运行 bash。
答案1
对我有用。我怀疑之前的一些输入中还残留有文本stdin
,您要向其中添加一些输入,以及(至关重要的)换行符。
您可以添加*
默认情况,并打印 中存储的内容REPLY
。我可能想以可见的形式显示这一点,以确定待处理的内容:
( * ) printf '%s' "${REPLY}" | od -A n -t x1ac;;
我也会引用"$yn"
,因为我不确定case
这里多个单词会做什么。