bashが$(<"filename")を自動的に置き換える方法

bashが$(<

猫を交換したいです。

var=$(cat "filename" 2>/dev/null)

bashism構文を介して:

var=$(<"filename")

問題は、そのような警告を避けるために攻撃を沈黙させる方法がわからないことです。

bash: filename: No such file or directory

私はこれを試しました:

var=$(2>/dev/null <"filename")

ただし、既存のファイルは読み込まれませんvar

ベストアンサー1

割り当てを複合ブロックにラップし、リダイレクトを使用するのがうまくいくようです。

{ var=$(<"$file"); } 2>/dev/null;

例えば

$ echo hello > test1; rm -f test2
$ file=test1; { var=$(<"$file"); } 2>/dev/null; echo "${var:-[it is empty]}"
hello
$ file=test2; { var=$(<"$file"); } 2>/dev/null; echo "${var:-"[it is empty]"}"
[it is empty]

サブシェルの作成には使用しないでください( .. )。割り当てられた変数が失われるためです。

おすすめ記事