2016-05-05 6 views
1

私はいくつかのファイルのbasenameを取得し、それらをループ内で出力ファイルに結合しようとしています。変数 'x'と 'y'に基底名を代入しようとしていますが、エラー "x:command not found"が表示され続けます。なぜbashは 'x'と 'y'がコマンドだと思うのですが、出力ファイルに両方のファイル名(パスや拡張子は含まない)を得る最良の方法は何ですか?助けてくれてありがとう!bashは変数がコマンドだと思っています

for i in ~/SOSP/pops/*.txt 
do 
    x = $(basename $i) 
    for j in ~/SOSP/pops/*.txt 
    do 
     y = $(basename $j) 
     vcftools --vcf ~/SOSP/sosp.vcf --weir-fst-pop $i --weir-fst-pop $j --out ~/SOSP/fst_pairs/${x}_vs_${y}.txt 
    done 
done 
+4

POSIXのようなシェル変数の代入で、 '='の周りに空白を入れてはいけません。 [shellcheck.net](http://shellcheck.net)はこのようなエラーをキャッチします。 – mklement0

答えて

3

=の前後にスペースを入れないでください:

は動作しません:

x = $(basename $i) 
y = $(basename $j) 

作品:

x=$(basename $i) 
y=$(basename $j) 
-2

x=$(basename $i)

として、あなたのコードにスペースを追加します。
+3

いいえ、空白が '$('または ''の前に '')続くかどうかは関係ありません。対照的に、割り当てでは '= 'の周りに空白を入れてはいけません。 – mklement0

+1

あなたは '='の周りのスペースを削除することを意味しました。 – anishsane

+0

私は両方を意味しました。私の経験上、括弧のまわりのスペースは重要です。 – GMichael

関連する問題