这是我的命令:
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"`