私のテキストを解析すると、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、次に適用bash可能zsh

答え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"`

関連情報