相关疑难解决方法(0)

循环遍历名称中带有空格的文件?

我编写了以下脚本来比较两个目录的输出,其中包含所有相同的文件:

#!/bin/bash

for file in `find . -name "*.csv"`  
do
     echo "file = $file";
     diff $file /some/other/path/$file;
     read char;
done
Run Code Online (Sandbox Code Playgroud)

我知道还有其他方法可以实现这一目标。奇怪的是,当文件中有空格时,这个脚本会失败。我该如何处理?

find 的示例输出:

./zQuery - abc - Do Not Prompt for Date.csv
Run Code Online (Sandbox Code Playgroud)

scripting bash find text-processing filenames

187
推荐指数
6
解决办法
25万
查看次数

为什么经常使用`while IFS= read`,而不是`IFS=; 阅读时..`?

似乎通常的做法会将 IFS 的设置放在 while 循环之外,以免在每次迭代时重复设置......这只是一种习惯性的“猴子看,猴子做”的风格,就像这只猴子直到我读过man read,还是我在这里错过了一些微妙(或明显明显)的陷阱?

shell text-processing environment-variables

94
推荐指数
3
解决办法
12万
查看次数

你什么时候会使用额外的文件描述符?

我知道您可以创建一个文件描述符并将输出重定向到它。例如

exec 3<> /tmp/foo # open fd 3.
echo a >&3 # write to it
exec 3>&- # close fd 3.
Run Code Online (Sandbox Code Playgroud)

但是你可以在没有文件描述符的情况下做同样的事情:

FILE=/tmp/foo
echo a > "$FILE"
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个很好的例子,说明何时必须使用额外的文件描述符。

shell bash io-redirection file-descriptors

93
推荐指数
5
解决办法
6万
查看次数

如何从bash中的变量逐行读取?

我有一个包含命令的多行输出的变量。从变量中逐行读取输出的最有效方法是什么?

例如:

jobs="$(jobs)"
if [ "$jobs" ]; then
    # read lines from $jobs
fi
Run Code Online (Sandbox Code Playgroud)

shell bash io cat

68
推荐指数
5
解决办法
26万
查看次数

文件描述符和 shell 脚本

我很难理解如何在 shell 脚本中使用文件描述符。

我知道基础知识,例如

exec 5 > /tmp/foo
Run Code Online (Sandbox Code Playgroud)

所以 fd 5 附加到 foo 用于写入。

exec 6 < /tmp/bar
Run Code Online (Sandbox Code Playgroud)

……阅读。

exec 5>&-
Run Code Online (Sandbox Code Playgroud)

...关闭fd。

这有什么作用呢?

#!/bin/bash

exec 5 > /tmp/foo 
exec 6 < /tmp/bar 

cat <&6 | while read a
do
     echo $a >&5
done
Run Code Online (Sandbox Code Playgroud)

据我所知,&5关闭了 fd,那么每次调用后输出仍然如何成功重定向?

这是复制意大利面来自:这里

它声称在简单的echo $a > file情况下使用它会使其更快,但我无法理解。我将不胜感激任何指向体面教程的链接。我的谷歌权力似乎让我失望。

bash io-redirection shell-script file-descriptors

35
推荐指数
1
解决办法
5万
查看次数