首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >foreach循环中的TCSH错误: files.list:命令未找到

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

Stack Overflow用户
提问于 2018-10-09 11:02:03
回答 3查看 2K关注 0票数 0

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

这是我的代码:

代码语言:javascript
复制
 #! /usr/bin/tcsh -f 

echo please enter files list 

set x = $<

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

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

代码语言:javascript
复制
myScript22.sh
Mad45.sh
Number32.sh
killBill.sh
gotMilk.sh
bugslife.sh

我犯了一个错误-- "foreach:没有括号的单词。“

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

任何帮助都是非常感谢的!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-10-17 13:38:35

如果您确实必须使用tcsh,那么下面是执行此操作的主要方法:

代码语言:javascript
复制
#!/usr/bin/tcsh -f
echo please enter files list
set x = $<

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

重要的是要确保cat命令介于。区别在于,否则,foreach语句将逐字读取,而双引用版本将逐行读取。逻辑是..。有问题。另外,我在line语句中引用了变量echo,因为当它碰到空行时,它实际上会发出抱怨。

bash中,您只需做以下好事:

代码语言:javascript
复制
#!/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"

非常重要的是:

  • CSH程序被认为是有害的
  • 不使用C shell的十大原因
票数 1
EN

Stack Overflow用户

发布于 2018-10-09 11:21:52

出于参考目的,我在cat命令之前遗漏了$x命令。

因此,守则应改为:

代码语言:javascript
复制
 #! /usr/bin/tcsh -f 

echo please enter files list 

set x = $<

foreach i ('cat $x')    
echo $i     
end
票数 0
EN

Stack Overflow用户

发布于 2019-04-27 22:42:53

在tcsh脚本中有两个错误:

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

下面的脚本应该适用于您。

代码语言:javascript
复制
#!/usr/bin/tcsh -f

echo please enter files list 

set x = $<

foreach i(`cat $x`)
  echo $i
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52719489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档