解析我的文本时,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" ]

正如卡西莫多已经提到的,它扩展了你的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"`

相关内容