我对 shell 脚本相对较新,但对编程不熟悉,尽管我承认有一段时间不玩这个游戏了。
在试图了解 Bash 脚本中的错误时,我提出了三个简短的示例,说明我使用进程替换和“这里的字符串”为while
循环提供 STDIN,以避免 subshell 问题。
我对find
输出进行空分隔以避免与不寻常的文件名字符相关的潜在问题。
此示例效果很好,并输出根目录下所有文件夹的名称:
#!/bin/bash
while IFS= read -r -d '' y; do echo "${y}"
done < <(find / -type d -maxdepth 1 -mindepth 1 -printf "%P\0" | sort -z)
这个例子也很好用:
#!/bin/bash
find / -type d -maxdepth 1 -mindepth 1 -printf "%P\0" | sort -z | \
{ while IFS= read -r -d '' y; do echo "${y}"; done }
但是在这种情况下,我将find
输出存储在字符串中x
并尝试将其用作“此处字符串”的源,但什么也不输出:
#!/bin/bash
x=$(find / -type d -maxdepth 1 -mindepth 1 -printf "%P\0" | sort -z)
while IFS= read -r -d '' y; do echo "${y}"; done <<< "${x}"
我在这里缺少什么微妙之处(或我的密集度)?
我正在使用 GNU bash 4.1.7(2)-release。