2016-07-01 5 views
3

ユーザからの入力を読み込んでいるスクリプトがあります。ここに私のコードは次のとおりです。Bash入力の読み込み - プロンプトのタブ

if [ -z $volreadexists ]; then 
     echo -e "\tThis will overwrite the entire volume (/dev/vg01/$myhost)...are you sure?" 
     read REPLY 
     echo 
     if [[ $REPLY =~ ^[Yy]$ ]]; then 
      echo -e "\t\tContinuing" 
      syncvolume 
     else 
      echo "Fine...skipping" 
     fi 
    fi 

私はそれだけでreadにタブが挿入されませんので、read REPLYを使用することを抱えています。

read -p "\tDoes this look OK? (n for No)" -n 1 -r 

\tが読み取りプロンプトの上にタブをだろう:私が探しているのようなものです。

読み取りプロンプトにタブを追加するにはどうすればよいですか?

UPDATE:@gniourf !:

read -p $'\tDoes this look OK? (n for No)' -n 1 -r 

からの偉大な答えてくれてありがとうしかし、私は問題を発見しました。私はそこに変数を使用しようとすると、それはそれを翻訳しません:

read -p $'\tThis will overwrite the entire volume (/dev/vg01/$myhost)...are you sure? ' -n 1 -r 

私が欲しい
 This will overwrite the entire volume (/dev/vg01/$myhost)...are you sure? 

次のようになります。二重引用符を使用して

 This will overwrite the entire volume (/dev/vg01/server1)...are you sure? 

はどちらか動作しません:(

アイデア?

+2

[ANSI-C quoting](https://www.gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting)を使用してください: 'read -p $ '\ tこのように見えますか? (nはNo) '-n 1 -r' –

+1

いいね!甘い、thx! – user3063045

+1

@gniourf_gniourfあなたは実際にそれを回答として追加して、それをアップヴォートして(もっと重要なことに)受け入れることができます。 –

答えて

0

Read a variable in bash with a default value

をし、回避策を作成しました:私はこの答えを参照することになりました。これは完璧ではないが、それは動作します:

myhost="server1" 
if [ -z $volreadexists ]; then 
    read -e -i "$myhost" -p $'\tJust checking if it\'s OK to overwrite volume at /dev/vg01/' 
    echo 
    if [[ $REPLY =~ ^$myhost[Yy]$ ]]; then 
     echo -e "\t\tContinuing" 
    else 
     echo "Fine...skipping" 
    fi 
fi 
1

だけ使用ANSI-C quoting

read -p $'\tDoes this look OK? (n for No)' -n 1 -r 

さて、あなたはあまりにも変数の展開を使用したい場合、あなたはそのように異なる引用符を混在させることができます。

read -p $'\t'"This will overwrite the entire volume (/dev/vg01/$myhost)...are you sure? " -n 1 -r 

ここでは、タブ文字としてANSI-Cクォートを使用しました。 $'\t'"This will...."の間にスペースを入れないでください。

関連する問題