I'm trying to learn bash. In some tutorial, I found select loop. But it doesn't work on either my MAC OS or Linux. My code is like this:
#!/bin/bash
names="Kyle Cartman Stan Quit"
PS3="Select character: "
select name in $names
do
echo "name="$name
done
I use ./test.sh to call this program and the result it like this:
1) Kyle
2) Cartman
3) Stan
4) Quit
Select character: Kyle
name=
Select character: Stan
name=
Select character:
It seems that it can not detect my input. Could anyone help me?
The code is fine; its usage is wrong: The allowed entries are 1
, 2
, 3
or 4
, not Kyle
, Cartman
, Stan
, or Quit
. (If the user had to type the whole name, what's the point of putting numbers by them?)
The empty string tells you that the user entered something invalid. Observe, by contrast:
1) Kyle
2) Cartman
3) Stan
4) Quit
Select character: 1
name=Kyle
Select character: 3
name=Stan
By the way -- it should be:
# SAFE: quotes everything
echo "name=$name"
...or...
# SAFE: Quotes only the expansion
echo name="$name"
...not...
# BUGGY: Runs expansion unquoted; can remove characters in IFS, expand globs, etc
echo "name="$name
See When Should You Quote? on the Wooledge wiki, or make a habit of running your code through http://shellcheck.net/, which will find issues of this nature.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With