循环文件夹中的文件时出现奇怪的行为

循环文件夹中的文件时出现奇怪的行为

不知道这里发生了什么。我在 Mac 上使用 Bash 3.2。我有:

ores_resource(){
  for f in "$(cd "$HOME/.oresoftware/bash" && find . -type f)"; do
       f="${f:2}"
       echo "my file $f"
  done;
}

我得到了这样的回应:

my file r2g.sh
./fame.completion.sh
./read_json.sh
./nlu.sh
./lmx.sh
./public-bash-utils.sh
./run-tsc-if.sh
./r2g.completion.sh
./fame.sh
./waldo.sh
./nlu.completion.sh

那么这里到底发生了什么 - 我以为它会在每行前面注销“我的文件”?

答案1

这是使用选项的解决find方案-exec

ores_resource() {
  cd $HOME/.oresoftware/bash
  find . -type f -exec bash -c 'echo "my file ${1:2}"' bash {} \;
}

对于新的 bash 进程找到的每个文件名,find都以 后面的命令字符串启动-c。每个文件名都{}作为参数传递$1给 bash 进程(就像你的变量$f)。

相关内容