问题描述
我想将文件内容存储在 bash shell 变量中。这工作正常:
$ cat hello
Hello,world!
$ F=hello
$ Q=$(cat $F)
$ echo $Q
Hello,world!
但是,如果文件包含星号,则星号将替换为当前目录中所有文件的列表。
如何引用文件名来保护星号?或者以其他方式将文件加载到 shell 变量中?
我知道 this question,但它不适用于包含星号的文件。
解决方法
Q
包含星号。 $Q
的未加引号扩展将 *
替换为文件列表。
$ Q="*"
$ echo $Q
<list of files>
$ echo "$Q"
*
赋值的右侧不受路径名扩展的影响,因此 Q=*
也能正常工作,用于读取文件的命令替换也不受影响。 Q=$(cat hello)
工作正常:您只需要引用 Q
的扩展。