我想更换猫:
var=$(cat "filename" 2>/dev/null)
通过 bashism 语法:
var=$(<"filename")
问题是我不知道如何使 bashism 保持沉默以避免此类警告:
bash: filename: No such file or directory
我试过这个:
var=$(2>/dev/null <"filename")
但它不再将现有文件读入var
。
我想更换猫:
var=$(cat "filename" 2>/dev/null)
通过 bashism 语法:
var=$(<"filename")
问题是我不知道如何使 bashism 保持沉默以避免此类警告:
bash: filename: No such file or directory
我试过这个:
var=$(2>/dev/null <"filename")
但它不再将现有文件读入var
。
将分配包装到一个复合块中并在其上使用重定向似乎有效:
例如
只是不要
( .. )
用来创建子shell,因为那样分配的变量就会丢失。首先测试以确保它可用且可读:
测试
-f
测试是否filename
引用常规文件,-r
测试测试它是否可以被您读取。另一种方法是首先检查文件是否存在,然后将其读入变量。
以供参考:
在 中
zsh
,您可以使用$mapfile
特殊关联数组映射到名为键的文件的内容(请注意,它与bash
的mapfile
内置函数(不映射文件)无关并且早十年左右)。它使用mmap()
so 只能用于常规文件。如果文件无法打开或映射,它不会输出任何内容。要检查错误,您可以使用
$ERRNO
特殊变量:$ERRNO
values 可以转换为ENOENT
,EACCESS
...模块$errnos
中的数组代码,或者也可以转换为内置zsh/system
函数的错误字符串。syserror
zsh/system
你也可以做
mapfile[filename]=$var
改变文件的内容,它是真正的映射。请注意,虽然
$(<filename)
会从 的内容中删除所有尾随换行符filename
,但会$mapfile[filename]
按原样扩展为文件的全部内容(包括二进制文件)。