3

我正在尝试将 bashselect语句用于命令循环。select 语句中的变量始终为空。这是一个说明问题的简单脚本:

#!/bin/bash

select term in one two exit
do
  echo you selected $term
  case $term in
    one ) echo one; break;;
    two ) echo two; break;;
    exit ) echo will exit; return;;
  esac
done

这是我运行此脚本时发生的情况:

$ ./test.sh 
1) one
2) two
3) exit
#? one
you selected
#? two
you selected
#? exit
you selected
#? ^D

有谁知道我可能做错了什么?我在 Mac OS X 10.7.3 上。/bin/bash --version显示:GNU bash,版本 3.2.48(1)-release (x86_64-apple-darwin11)

4

2 回答 2

6

@jedwards 给了你直接的答案。但是,如果您想保护自己免受其他用户遇到相同错误的影响,您可以执行以下操作

select term in first second exit; do
  [[ -z $term ]] && casevar=$REPLY || casevar=$term. # or, shorter, casevar=${term:-$REPLY}
  case $casevar in
    1|first) echo "the first option"; break ;;
    2|second) echo "option no. 2"; break ;;
    3|exit) echo bye; break ;;
  esac
done

请注意 bash 手册中的这一点:

从标准输入中读取一行。如果该行包含与显示的单词之一相对应的数字,则将 name 的值设置为该单词。如果该行为空,则再次显示单词和提示。如果读取 EOF,则选择命令完成。读取的任何其他值都会导致 name 设置为 null。读取的行保存在变量 REPLY 中。

于 2012-04-29T02:49:08.140 回答
5

如果您输入“1”或“2”而不是“一”或“二”,则该脚本有效。

于 2012-04-29T01:44:44.043 回答