如何在 bash 中用引号括起一行?

如何在 bash 中用引号括起一行?

当我运行时,for i in $(find -name '*.ogg'); do echo '$i'; done我没有像预期的那样得到每个文件一行。相反,当文件名中有空格时,每个单词都会出现在单独的行中,因此我无法在文件上运行命令。

答案1

find -name '*.ogg' -print0 | xargs -0 -L1 command

答案2

以下是您可能想要做的一个例子:

 #! /bin/sh
 IFS="\n"
 for xxx in `cat /etc/hosts`
 do
    echo $xxx
 done
 exit 0

IE:将 IFS(字段间分隔符)更改为 \n,而不是空格、制表符、\n

答案3

您应该改为插入find循环while

find -name '*.ogg' | while read -r i; do echo "$i"; done

此外,您使用的单引号$i会阻止变量扩展为其值。

另一种方法是使用进程替换:

 while read -r i; do echo "$i"; done < <(find -name '*.ogg')

这样做的好处是不会在while循环外创建子 shell,因此循环内设置的变量(以及对环境的其他更改)在循环完成后仍然可用。

答案4

在这种情况下也没有必要find。您可以设置globstar选项并使用 bash 通配符。

shopt -s globstar
for i in **/*.ogg; do echo '$i'; done

相关内容