小编A.C*_*Cho的帖子

bash 脚本在命令上的临时值

像下面的命令,

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)

回声消息不是你好。上述命令的真正含义是什么?

bash environment-variables

13
推荐指数
2
解决办法
9978
查看次数

当我使用内置命令时,shell 是否会分叉?

当我运行命令时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 内置程序在分叉进程下运行?

shell io-redirection

7
推荐指数
2
解决办法
2578
查看次数

关于双引号的困惑

我在使用命令时了解到,双引号将除 $、`、\ 之外的所有内容都视为字符。

但是,当使用命令 likefind -type f -name "*.jpg" *.jpg在双引号内时。然后,这意味着我们想要将*.视为一个角色。因此,该find命令应该输出具有名称的常规文件*.jpg,而不是实现路径名扩展。

如果我们想做路径名扩展,我想我必须做类型命令find -type f -name *.jpg(没有双引号)。

但是,结果是一样的。为什么在这个命令中使用双引号?

shell find quoting wildcards

4
推荐指数
1
解决办法
136
查看次数