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

时间:2018-10-09 11:02:03

标签: linux foreach tcsh

我试图将用户输入的变量(文件名)传递到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:未加括号的单词。”

可能是'cat $x'没有正确调用x变量吗?如果是这样,我如何设置文件,以便可以将其内容循环遍历?

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

如果您真的真的必须使用,则以下是正确的方法:

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

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

请务必注意cat命令位于<双引号>之间。区别在于,否则foreach语句将逐字读取,而双引号版本将逐行读取。这样做的逻辑是……值得怀疑的。另外,我在line语句中引用了变量echo,因为当它碰到空行时它实际上会抱怨。

中,您将做以下事情:

#!/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"

非常重要的内容:

答案 1 :(得分:0)

出于参考目的,我在$ x之前缺少cat命令。

因此代码应显示为:

 #! /usr/bin/tcsh -f 

echo please enter files list 

set x = $<

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

答案 2 :(得分:0)

您在tcsh脚本中有两个错误:

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

以下脚本适合您。

None