我试图将用户输入变量(文件名)传递到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变量吗?如果是这样的话,我如何设置文件,使它的内容可以通过环?
任何帮助都是非常感谢的!
发布于 2018-10-17 13:38:35
如果您确实必须使用tcsh,那么下面是执行此操作的主要方法:
#!/usr/bin/tcsh -f
echo please enter files list
set x = $<
foreach line (" `cat $x` ")
echo "$line"
end重要的是要确保cat命令介于。区别在于,否则,foreach语句将逐字读取,而双引用版本将逐行读取。逻辑是..。有问题。另外,我在line语句中引用了变量echo,因为当它碰到空行时,它实际上会发出抱怨。
在bash中,您只需做以下好事:
#!/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"非常重要的是:
发布于 2018-10-09 11:21:52
出于参考目的,我在cat命令之前遗漏了$x命令。
因此,守则应改为:
#! /usr/bin/tcsh -f
echo please enter files list
set x = $<
foreach i ('cat $x')
echo $i
end发布于 2019-04-27 22:42:53
在tcsh脚本中有两个错误:
下面的脚本应该适用于您。
#!/usr/bin/tcsh -f
echo please enter files list
set x = $<
foreach i(`cat $x`)
echo $i
endhttps://stackoverflow.com/questions/52719489
复制相似问题