【问题标题】:Find command in a bash script not working [duplicate]在 bash 脚本中查找命令不起作用 [重复]
【发布时间】:2021-12-08 04:34:13
【问题描述】:

我有一个 bash,它读取文件夹名称列表(所有数字不是字母)作为输入,并尝试找到每个文件夹的位置。 Find 命令根本不会向我返回任何内容。我不知道为什么。而如果我在不使用变量的情况下输入原始值,它会起作用。

代码:

    #!/bin/bash
filename='bat.txt'
n=1
while read line;
do
lien=$(find ./ -type d -name "$line")
# for read each line
echo "line no. $n : $line"
n=$((n+1))
done < $filename

Bat.txt 示例:

19223
12233
34434
34434

【问题讨论】:

  • 请用文字替换所有图片。
  • 完成!您对此有解决方案吗?
  • 有一个错字:你赋值给lien,然后访问$line
  • 你的代码和图片上的不一样。在图片上,您错误地转义了$ 并将* 放在引号之间,使find 尝试查找字面上命名为*$line* 的目录。
  • 即使我这样做,也不会改变结果。 lien=$(find ./ -type d -name "$line") # 读取每一行 echo "line no. $n : $lien"

标签: bash find command


【解决方案1】:

根据通过 cmets 提供的其他信息,解决方案应该是更正脚本中的拼写错误:

#!/bin/bash
filename='bat.txt'
n=1
while read line;
do
line=$(find ./ -type d -name "$line")
# for read each line
echo "line no. $n : $line"
n=$((n+1))
done < $filename

并将bat.txt 的行尾从Windows/DOS 转换为Linux/Unix

sed -i 's/\r$//' bat.txt 

关于这个问题的更多信息可以在here找到,执行转换的各种替代方法可以在here找到。

【讨论】:

    最近更新 更多