猛烈抨击“如果文件存在,将其读入变量,否则为空字符串”?

时间:2018-12-19 21:46:50

标签: bash

我可以写:

X=""
if [ -f foo.txt ]; then
  X=$(<foo.txt)
fi

但这是4行。有没有更紧凑的方式来表达这种逻辑?

2 个答案:

答案 0 :(得分:2)

在文件存在检查之后,您可能希望使用此行来表示成功/错误:

[[ -f foo.txt ]] && s=$(<foo.txt) || s=''
如果文件存在,将执行

s=$(<foo.txt),否则将执行s=''

答案 1 :(得分:1)

如果仅执行X=$(< foo.txt),则如果文件不存在,X将为空,但是您会收到一条错误消息:

$ X=$(< foo.txt)
-bash: foo.txt: No such file or directory

如果您想禁止显示该消息(以及其他任何错误消息),则可以将stderr重定向到/dev/null

{ X=$(< too.txt); } 2> /dev/null

X实际上此后为空:

$ declare -p X
declare -- X="