おそらく、翻訳された出力をまだ変数に割り当てていないことが原因です。また、単語の分割やパス名の拡張を防ぐために、変数を二重引用符で囲むことをお勧めします。
foobar=$(echo "$foobar" | tr '[:upper:]' '[:lower:]')
使用していてcase
、入力がどちらの方法であるかを確認する必要がある場合は、y
このY
ような glob パターンを使用できます。小文字に音訳する必要はありません。
case $foobar in
[yY])
echo "User said yes."
;;
*)
echo "User said no."
;;
esac
また、-s を使用して、ユーザー入力の表示を何らかの形で抑制することもできます。
read -s foobar
全体として、コードを両方でうまく機能させるには、bash 固有の部分を既に削除する必要がbash
あります。sh
#!/bin/bash
echo "Please enter a word:"
read -s foobar
foobar=$(echo "$foobar" | tr '[:upper:]' '[:lower:]')
echo "$foobar"
小さいフォームを表示するだけの場合は、割り当てをスキップできます。ただし、別のエコーを一緒に使用しないでください。
#!/bin/bash
echo "Please enter a word:"
read -s foobar
echo "$foobar" | tr '[:upper:]' '[:lower:]'
からの別の代替形式case
。これは POSIX 互換であることを意図しています。
if [ "$foobar" = y ] || [ "$foobar" = Y ]; then
echo "User said yes."
else
echo "User said no."
fi
bash では、単純に次のようになります。機能をサポートしていない以前のバージョンでも${parameter,,}
機能します。
if [[ $foobar == [yY] ]]; then
echo "User said yes."
else
echo "User said no."
fi