未定义的变量

Man*_* Os 2 scripting csh

我正在尝试使用此脚本:

#!/bin/csh
foreach SUB (1 2 3 4 5 6 7 8 9 10 11 12 13 14)
    echo $SUB
    foreach VISIT (1 2 3 4 5 6 7 8)
        echo $VISIT
        grep 'StudyDate' -f  /home/colourlab/Desktop/DrummingDTI/D${SUB}/D${SUB}V${VIS}/scout/001/infodump.dat
    done
done
Run Code Online (Sandbox Code Playgroud)

但每次我收到此错误消息时:

1
1
SUB: Undefined variable.
Run Code Online (Sandbox Code Playgroud)

我不知道为什么。

Tim*_*edy 5

除了脚本不应该用csh.

你用 开始你的循环,csh foreach并试图用 结束它们bash done。a 的循环退出csh foreachend,不是done。此外,您有一个在 grep 语句VISIT中调用的变量$VIS

所以你的脚本在 csh 中在语法上是正确的:

#!/bin/csh
foreach SUB (1 2 3 4 5 6 7 8 9 10 11 12 13 14)
    echo $SUB
    foreach VISIT (1 2 3 4 5 6 7 8)
        echo $VISIT
        grep 'StudyDate' -f  /home/colourlab/Desktop/DrummingDTI/D${SUB}/D${SUB}V${VISIT}/scout/001/infodump.dat
    end
end
Run Code Online (Sandbox Code Playgroud)

或在 bash 中:

#!/bin/bash
for SUB in 1 2 3 4 5 6 7 8 9 10 11 12 13 14; do
    echo $SUB
    for VISIT in 1 2 3 4 5 6 7 8; do
        echo $VISIT
        grep 'StudyDate' -f  /home/colourlab/Desktop/DrummingDTI/D${SUB}/D${SUB}V${VISIT}/scout/001/infodump.dat
    done
done
Run Code Online (Sandbox Code Playgroud)

编辑 2017/04/03

这是为文件添加测试的 bash 脚本版本:

#!/bin/bash

idf_pfx="/home/colourlab/Desktop/DrummingDTI"
idf_sfx="scout/001/infodump.dat"

for SUB in 1 2 3 4 5 6 7 8 9 10 11 12 13 14; do
    echo $SUB
    for VISIT in 1 2 3 4 5 6 7 8; do
        echo $VISIT
        idfile="${idf_pfx}/D${SUB}/D${SUB}V${VISIT}/${idf_sfx}"
        if [ -f "${idfile}" ]; then
            grep 'StudyDate' $idfile
        else
            echo "No studydate file: $idfile"
        fi
    done
done
Run Code Online (Sandbox Code Playgroud)

  • 另一个不使用 `csh` 的原因:[有趣的 $PATH。等待。或者那是 $path ` 是空格分隔的。我从未测试过如果将名称中带有空格的目录放入 `csh` 的 `$path` 会发生什么...... (2认同)