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
如果你真的真的真的真的必须使用tcsh,那么下面是正确的方法:
#!/usr/bin/tcsh -f
echo please enter files list
set x = $<
foreach line (" `cat $x` ")
echo "$line"
end
请务必注意 cat
命令位于 <双引号> 之间。不同之处在于,foreach
语句将逐字读取,而双引号版本将逐行读取。这其中的逻辑……值得怀疑。另外,我在 echo
语句中引用了变量 line
,因为它实际上会在遇到空行时报错。
在 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"
非常重要的读物:
你的 tcsh 脚本有两个错误:
- foreach 条件中文件名前面缺少 cat 命令。
- 在 foreach 条件中使用直单引号 (' ') 而不是反引号 (``)。
以下脚本应该适合您。
#!/usr/bin/tcsh -f
echo please enter files list
set x = $<
foreach i(`cat $x`)
echo $i
end
我正在尝试将用户输入变量(文件名)传递到 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
如果你真的真的真的真的必须使用tcsh,那么下面是正确的方法:
#!/usr/bin/tcsh -f
echo please enter files list
set x = $<
foreach line (" `cat $x` ")
echo "$line"
end
请务必注意 cat
命令位于 <双引号> 之间。不同之处在于,foreach
语句将逐字读取,而双引号版本将逐行读取。这其中的逻辑……值得怀疑。另外,我在 echo
语句中引用了变量 line
,因为它实际上会在遇到空行时报错。
在 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"
非常重要的读物:
你的 tcsh 脚本有两个错误:
- foreach 条件中文件名前面缺少 cat 命令。
- 在 foreach 条件中使用直单引号 (' ') 而不是反引号 (``)。
以下脚本应该适合您。
#!/usr/bin/tcsh -f
echo please enter files list
set x = $<
foreach i(`cat $x`)
echo $i
end