下面的代码片段是我用来确定文件系统中文件所在位置的路径和文件名的内容。
for index in "${!files[@]}"
do
(find . -type f -name "${files[index]}" -print0) 2>&1 | while IFS= read -r -d $'\0' line; do
if [[ ${line} == ${search_pattern}* ]]
then
relative_path=$(echo "$line"|awk '{print substr($0,2)}')
file_path=$(echo "$(pwd)$relative_path" |awk -F/ '{$NF=""; print $0}'|sed -e 's/ /\//g')
file_name=$(echo "$(pwd)$relative_path" |awk -F/ '{print $NF}')
.................................................................
我的问题是关于线路,
"while IFS= read -r -d $'\0' line; do"
早些时候,我在 find 命令上使用了 for 循环。但是在stackoverflow上有一篇文章说这更好,更正确。我试过了,它有效,但不太明白。此行是否会以任何会改变主外壳的方式更改 IFS?我试图弄清楚,因为我不太精通 SHELL 脚本,我无法理解该行的作用。
我不想在生产系统中部署它,然后发现其他脚本失败,因为 IFS 变量已更改。