![解析我的文本时,Cat 返回“未找到命令”,而不是返回字符串的输出](https://linux22.com/image/13005/%E8%A7%A3%E6%9E%90%E6%88%91%E7%9A%84%E6%96%87%E6%9C%AC%E6%97%B6%EF%BC%8CCat%20%E8%BF%94%E5%9B%9E%E2%80%9C%E6%9C%AA%E6%89%BE%E5%88%B0%E5%91%BD%E4%BB%A4%E2%80%9D%EF%BC%8C%E8%80%8C%E4%B8%8D%E6%98%AF%E8%BF%94%E5%9B%9E%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E8%BE%93%E5%87%BA.png)
这是我的命令:
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,适用于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"`