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

두 가지 질문이 있습니다:

  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"
    오늘=$(날짜)
     
    $

관련 정보