내 텍스트를 구문 분석할 때 Cat은 문자열을 반환하는 출력 대신 "명령을 찾을 수 없음"을 반환합니다.

내 텍스트를 구문 분석할 때 Cat은 문자열을 반환하는 출력 대신 "명령을 찾을 수 없음"을 반환합니다.

이것은 내 명령입니다:

mail_recipient_location="$PWD/mail_config/myFile.txt" 
textVariable= [ -f "$mail_recipient_location" ] && `cat "$mail_recipient_location"`

내 터미널에 cat반환이 표시됩니다.

{the mail's adress's value in myFile.text}: command not found

cat파일 텍스트 값을 textVariable에 어떻게 삽입할 수 있나요 ?

답변1

set -x스크립트를 사용하거나 디버그하면 다음과 같이 bash -x인쇄됩니다.

+ mail_recipient_location=/somepath/mail_config/myFile.txt
+ textVariable=
+ '[' -f /somepath/mail_config/myFile.txt ']'
++ cat /somepath/mail_config/myFile.txt
+ the mail's adress's value

평가 후

[ -f "$mail_recipient_location" ]

Quasimodo가 이미 언급했듯이 이는 귀하를 확장 cat "$mail_recipient_location"하고 무시합니다. 따라서 실행하려는 명령이 아닌 textVariable=것 같습니다 .the mail's adress's value

원하는 것을 달성하려면 다음을 사용할 수 있습니다. (또한 다음을 피해야 합니다.우루무치대학교):

# oneliner
[ -f "$mail_recipient_location" ] && textVar=$(<"$mail_recipient_location")

# or
if [ -f "$mail_recipient_location" ]; then
   textVar=$(<"$mail_recipient_location")
else
   : # do something
fi

비 POSIX, 다음에 적용 가능 bashzsh

답변2

오류는 다음 줄에 있습니다.

textVariable= [ -f "$mail_recipient_location" ] && `cat "$mail_recipient_location"`

cat "$mail_recipient_location"이메일 주소인 백틱 평가의 출력입니다 . 이것은 분명히 당신이 원하는 것이 아닙니다. 백틱을 제거하세요. 백틱만 제거해도 등호 뒤에 공백이 있기 때문에 코드가 여전히 작동하지 않습니다. 이는 textVariable이 항상 빈 문자열로 설정된다는 의미입니다.

또한 백틱 사용은 더 이상 사용되지 않습니다. 아래 코드는 더 깔끔해 보이고 원하는 작업을 수행합니다.

if [ -f "$mail_recipient_location" ]; then
    textVariable=$(cat "$mail_recipient_location")
fi

답변3

당신은 우리에게서 멀지 않습니다. 이 시도

mail_recipient_location="$PWD/mail_config/myFile.txt"
[[ -f "$mail_recipient_location" ]] && textVariable=$(cat "$mail_recipient_location")

먼저 파일이 존재하는지 확인하십시오. 그런 다음 변수를 할당합니다.

POSIX 환경 [[ ... ]]의 경우 [ ... ].

답변4

이 시도

[ -f "$mail_recipient_location" ] && textVariable=`cat "$mail_recipient_location"`

관련 정보