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

问题描述 投票:0回答:3

我试图将用户输入变量(文件名)传递到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变量?如果是这样,我如何设置文件,以便它的内容可以循环播放?

任何帮助表示赞赏!

linux foreach tcsh
3个回答
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"

非常重要的读物:


0
投票

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

所以代码应该是:

 #! /usr/bin/tcsh -f 

echo please enter files list 

set x = $<

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

0
投票

你的tcsh脚本有两个错误:

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

以下脚本应该适合您。

#!/usr/bin/tcsh -f

echo please enter files list 

set x = $<

foreach i(`cat $x`)
  echo $i
end
© www.soinside.com 2019 - 2024. All rights reserved.