像下面的命令,
if true; then
IFS=":" read a b c d e f <<< "$test"
Run Code Online (Sandbox Code Playgroud)
书中说,当赋值命令(IFS ":"
)在主命令(read a b c d e f <<< "$value"
)之前使用时,它的值暂时对主命令有效。因此,该read
命令使用 delimiter :
。
但是,就像这个命令,
if true; then
HOME="hello" echo "$HOME"
Run Code Online (Sandbox Code Playgroud)
回声消息不是你好。上述命令的真正含义是什么?
当我运行命令时type type
,这会给我一个标准输出的结果。
所以,现在我试试这个命令:
type type > abc.txt
Run Code Online (Sandbox Code Playgroud)
它将标准输出重定向到abc.txt
. 因此,如果此命令在同一进程(bash 本身)上执行,则文件描述符 1 指向abc.txt
. 之后,每当我使用 run 命令时,这些结果都应该转到 file abc.txt
,因为文件描述符 1 指向abc.txt
.
但是,结果总是进入标准输出。这是否意味着 shell 内置程序在分叉进程下运行?
我在使用命令时了解到,双引号将除 $、`、\ 之外的所有内容都视为字符。
但是,当使用命令 likefind -type f -name "*.jpg"
*.jpg
在双引号内时。然后,这意味着我们想要将*
和.
视为一个角色。因此,该find
命令应该输出具有名称的常规文件*.jpg
,而不是实现路径名扩展。
如果我们想做路径名扩展,我想我必须做类型命令find -type f -name *.jpg
(没有双引号)。
但是,结果是一样的。为什么在这个命令中使用双引号?