我的目标 --> 命令中的文件列表必须逐行读取并用作另一个命令的一部分。
描述--> linux 中的命令返回
archive/Crow.java
archive/Kaka.java
mypmdhook.sh
存储在 changed_files
变量中。我使用以下 while 循环逐行读取文件并将其用作 pmd 命令的一部分
while read each_file
do
echo "Inside Loop -- $each_file"
done<$changed_files
我是编写 shell 脚本的新手,但我假设这些行会在循环中分开并在每次迭代中打印,但我却收到以下错误 --
mypmdhook.sh: 7: mypmdhook.sh: cannot open archive/Crow.java
archive/Kaka.java
mypmdhook.sh: No such file
你能告诉我如何只获取字符串形式的值而不是打开的文件吗?顺便说一句,该文件确实存在,这让我感到更加困惑。(后来在命令中使用它)。我很乐意提供任何有助于我理解和解决此问题的答案。
最佳答案
由于您将数据存储在变量中,因此请使用“here string”而不是文件重定向:
changed_files="archive/Crow.java
archive/Kaka.java
mypmdhook.sh"
while read each_file
do
echo "Inside Loop -- $each_file"
done <<< "$changed_files"
Inside Loop -- archive/Crow.java
Inside Loop -- archive/Kaka.java
Inside Loop -- mypmdhook.sh
引用 "$changed_files"
以保留换行符非常重要,因此 while-read 循环会按您预期的方式工作。一条经验法则:总是引用变量,除非您确切地知道为什么要去掉引号。
关于linux - 在 shell 脚本中将文件路径读取为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26023116/