Bashでは、変数値のパディングが機能しません。

Bashでは、変数値のパディングが機能しません。

次のbashスクリプトがあります。

#!/bin/bash
$db=DB
$H=6973
$cov=38
for i in $(find . -type f -name "*.*.las");
do
  cat <<EOF
  #qsub <<EOF
#!/bin/bash -l

#PBS -N DASqv
#PBS -l walltime=48:00:00
#PBS -j oe
#PBS -l mem=30G
#PBS -l ncpus=1
#PBS -M [email protected]
##PBS -m bea

cd \$PBS_O_WORKDIR

source activate thegenemyers

DAStrim=$(DASqv -v -H$H -c$cov $db $i | grep Recommend - | sed "s|Recommend ||g" - | sed "s|'||g" -)

DAStrim $db $i 

EOF

done

残念ながら、次のエラーが発生しました。

sh Dascrubber_pbs.sh

DASqv: -H '' argument is not an integer
  #qsub <<EOF
#!/bin/bash -l

#PBS -N DASqv
#PBS -l walltime=48:00:00
#PBS -j oe
#PBS -l mem=30G
#PBS -l ncpus=1
#PBS -M [email protected]
##PBS -m bea

cd $PBS_O_WORKDIR

source activate thegenemyers

DAStrim=

DAStrim  ./DB.309.las

DAStrim=$(DASqv -v -H6973 -c38 DB ./DB.82.las | grep Recommend - | sed "s|Recommend ||g" - | sed "s|'||g" -)私は例えば見たいと思いました。

私が逃したものは何ですか?

ベストアンサー1

2つの質問があります。

  1. 〜のようにスチールドライバーが指摘する。、シェルからの割り当て(Cシェル派生クラスを除く)は次のとおりです。
    変える=
    いいえ
    $変える=
  2. ここの文書の区切り文字列を引用しない場合、ここの文書の内容は解釈(拡張)されます。したがって、見ることを期待すべきではなくDAStrim=$(DASqv -v -H6973 ...)、見ることを期待しなければなりません。何らかの理由でコマンドを表示するには、またはその文字を引用するか(、、、または他のさまざまなバリエーションを使用できるように)エスケープする必要があります。例えば、DAStrim=whatever_the_output_of_DASqv_isEOF'EOF'"EOF"\EOF$
    $作業ディレクトリ=/tmp
     
    $i=foobar.las
     
    $cat<< EOF
    cd \$WORKDIR
    ls -l "$i"
    今日=$(日付)
    EOF
    CD $WORKDIR                             (算出)
    ls -l "foobar.las"
    今日 = 2018年1月30日火曜日午前1時27分42秒
     
    $cat<< 'EOF'
    cd \$WORKDIR                            (上記入力と同じ)
    ls -l "$i"
    今日=$(日付)
    EOF
    cd \$WORKDIR                            (算出)
    ls -l "$i"
    今日=$(日付)
     
    $

おすすめ記事