Bash 一句“如果文件存在,将其读入变量,否则为空字符串”?

Cha*_*son 5 bash

我可以写:

X=""
if [ -f foo.txt ]; then
  X=$(<foo.txt)
fi
Run Code Online (Sandbox Code Playgroud)

但这是4行。有没有更简洁的方式来表达这个逻辑?

Ben*_* W. 6

如果你这样做X=$(< foo.txt)X如果文件不存在,则将为空,但你会收到一条错误消息:

$ X=$(< foo.txt)
-bash: foo.txt: No such file or directory
Run Code Online (Sandbox Code Playgroud)

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

{ X=$(< too.txt); } 2> /dev/null
Run Code Online (Sandbox Code Playgroud)

X之后实际上是空的:

$ declare -p X
declare -- X="
Run Code Online (Sandbox Code Playgroud)

  • 写“x=$(cat file 2&gt;&amp;-)”效率稍低,但更短。 (3认同)