sách gpt4 ai đã đi

bash - 一行文件的 "$(cat file)"、 "$(

In lại 作者:行者123 更新时间:2023-11-29 08:54:51 31 4
mua khóa gpt4 Nike

我有一个只包含一行的输入文件:

$ cat input
foo bar

我想在我的脚本中使用这一行,据我所知有 3 种方法:

line=$(cat input)
line=$(<>
IFS= read -r line < input

例如,使用命令替换意味着我生成了一个子 shell,而使用 đọc 则不是,对吗?还有什么其他区别,一种方式比其他方式更受欢迎?我还注意到(使用 strace)只有 đọc 出于某种原因触发系统调用 openat。其他人怎么可能不呢?

$ strace ./script |& grep input
read(3, "#!/usr/bin/env bash\n\ncat > input"..., 80) = 80
read(255, "#!/usr/bin/env bash\n\ncat > input"..., 167) = 167
read(255, "\nline=$(cat input)\nline=$(
read(255, "line=$(
read(255, "IFS= read -r line < input\n", 167) = 26
openat(AT_FDCWD, "input", O_RDONLY) = 3

1 Câu trả lời

  • line=$(cat input)是读取整个文件的 POSIX 方式。它需要一个 fork 。

  • line=$(< input)是一种稍微更有效的 Bashism,用于读取整个文件。它还会 fork ,但不必执行。

  • 未提及但 mapfile/readarray对于将整个文件逐行读取到数组中,Bashisms 的效率要高得多。没有 fork 。

  • IFS= read -r line < input是在没有子 shell 的情况下读取单行的 POSIX 方式。没有 fork 。

你只看到后者打开文件的原因很简单,其他人是在子shell中做的,而你没有指定-f。跟踪子进程。

关于bash - 一行文件的 "$(cat file)"、 "$( https://stackoverflow.com/questions/51937702/

31 4 0
Bài viết được đề xuất: Bash 脚本大小限制?
Bài viết được đề xuất: bash - 在抑制 "No such file or directory"错误的同时将文件读入变量
Bài viết được đề xuất: bash - 将 2 行组合在一起但 "interlaced"
Bài viết được đề xuất: java - 移动后端入门
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com