foreach 循环中的 TCSH 错误:files.list:找不到命令

TCSH error in foreach loop: files.list: Command not found

我正在尝试将用户输入变量(文件名)传递到 tcsh 中的 foreach 循环中。例如,用户输入的变量是 "files.list"(保存在与保存 Shell 脚本相同的文件夹中,并且正在 运行 来自)。

这是我的代码:

 #! /usr/bin/tcsh -f 

echo please enter files list 

set x = $<

foreach i ('$x')    
echo $i     
end

我想要的是 "files.list" 中的每个单词都输出到屏幕上。 Files.list 包含 5 行,每行都有一个文件名。

myScript22.sh
Mad45.sh
Number32.sh
killBill.sh
gotMilk.sh
bugslife.sh

我收到一个错误 - "foreach: Words not parenthesized."

难道是 'cat $x' 没有正确调用 x 变量?如果是这样,我如何设置文件以便它的内容可以循环通过?

感谢任何帮助!

出于参考目的,我在 $x.

之前遗漏了 cat 命令

因此代码应为:

 #! /usr/bin/tcsh -f 

echo please enter files list 

set x = $<

foreach i ('cat $x')    
echo $i     
end

如果你真的真的真的真的必须使用,那么下面是正确的方法:

#!/usr/bin/tcsh -f
echo please enter files list
set x = $<

foreach line (" `cat $x` ")
   echo "$line"
end

请务必注意 cat 命令位于 <双引号> 之间。不同之处在于,foreach 语句将逐字读取,而双引号版本将逐行读取。这其中的逻辑……值得怀疑。另外,我在 echo 语句中引用了变量 line ,因为它实际上会在遇到空行时报错。

中,您只需做以下好事:

#!/usr/bin/env bash
echo "Please enter files list"
file=""
while [[ ! -e $file ]]; do read -r file; done

while read -r line; do
  echo "$line"
done < "$file"

非常重要的读物:

你的 tcsh 脚本有两个错误:

  1. foreach 条件中文件名前面缺少 cat 命令。
  2. 在 foreach 条件中使用直单引号 (' ') 而不是反引号 (``)。

以下脚本应该适合您。

#!/usr/bin/tcsh -f

echo please enter files list 

set x = $<

foreach i(`cat $x`)
  echo $i
end