linux - 在 shell 脚本中将文件路径读取为字符串

标签 linux shell sh pmd command-substitution

我的目标 --> 命令中的文件列表必须逐行读取并用作另一个命令的一部分。

描述--> 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/

相关文章:

linux - 在 bash 脚本中,$'\0' 的计算结果是什么?为什么?

bash - 在 Gitlab CI 管道中的每个环境使用不同的 Azure 订阅 ID

linux - 在 unix 中将多行、带引号的字符串作为单个命令行参数传递?

java - Linux 中的 native 内存使用率似乎比通过 JVM 本身(例如通过 JConsole)观察到的要高得多

linux - 将值从 1 列复制到另一列

linux - 在 shell 中,检查/bin/sh 被符号链接(symbolic link)到什么

shell - 使用shell脚本将十六进制数转换为十进制数

linux - 劫持 __NR_read 和 bash 崩溃(caf 用户?)

linux - Nginx - 从源代码构建 - 不工作

bash - 将所有变量从一个 shell 脚本传递到另一个?