2017-03-23 11 views
0

私は、タブ区切りの行(空白も含む)をbashスクリプトを使って変数に読み込もうとしています。私が遭遇する問題は、スペースで正しくトークンを読み取ることができないことです。私はIFS = '\ t'を設定しようとしましたが、動作しません。タブ区切り文字列(スペースを含む)を変数に正しく読み込むにはどうすればよいですか?

variable1 This is variable2 

予想される出力::私は欠けているわからない何

var1 = variable1 
var2 = This is variable2 

IFS='\t' 
while read -r var1 var2 ; 
do 
     echo "$var1" 
     echo "$var2" 
done < cat sample.txt 

Sample.txtを内容 -

ここで私が試したコードです。どんな助けもありがとうございます。

答えて

2

IFS=$'\t'を使用する必要があります。

bash文字列リテラルのエスケープシーケンスを解釈しません。 $'somestring'は、エスケープシーケンスを含む文字列リテラルの構文です。したがって、'\t'とは異なり、$'\t'は実際にはタブです。 man bashから

:フォーム$'string'

単語は特別に処理されています。この単語は、 を文字列に展開し、ANSI C標準の で指定されているように、バックスラッシュエスケープ文字を置き換えます。

また、< cat fileは必要ありません。

#!/bin/bash 

while IFS=$'\t' read -r var1 var2  
do 
     echo "$var1" 
     echo "$var2" 
done < sample.txt 
関連する問題