代码之家  ›  专栏  ›  技术社区  ›  ZakS

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

  •  0
  • ZakS  · 技术社区  · 7 年前

    我试图将用户输入变量(文件名)传递到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
    

    会是这样吗 'cat $x'

    感谢您的帮助!

    2 回复  |  直到 7 年前
        1
  •  1
  •   kvantour    7 年前

    如果你真的要用 ,则以下是正确的方法:

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

    非常重要的是:

        2
  •  0
  •   ZakS    7 年前

    为了便于参考,我错过了 cat 命令,在$x之前。

     #! /usr/bin/tcsh -f 
    
    echo please enter files list 
    
    set x = $<
    
    foreach i ('cat $x')    
    echo $i     
    end
    
        3
  •  0
  •   Anup Kumar    6 年前

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

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

    #!/usr/bin/tcsh -f
    
    echo please enter files list 
    
    set x = $<
    
    foreach i(`cat $x`)
      echo $i
    end