shell 如何从不同的路径设置两个不同的变量,并在sh中的一个脚本中运行它们

eanckbw9  于 2023-05-01  发布在  Shell
关注(0)|答案(2)|浏览(136)

我需要帮助来纠正这个。sh脚本,使用来自两个不同路径的两个不同变量。谢谢你的帮助!
我试过这个,但它不工作:

#!/bin/bash

path1="cd /work/bk1088/b382227/pidata/monpctl75"
path2="cd /work/bk1088/b382227/pidata/monpctl25"

for i in "path1/*.nc" and v in "path2/*.nc"; do

cdo -a sub ${i} ${v} /work/bk1088/b382227/pidata/IQR-75sub25/${i}_iqr.nc

done
neskvpey

neskvpey1#

简单地说:

#!/bin/bash

path1="/work/bk1088/b382227/pidata/monpctl75"
path2="/work/bk1088/b382227/pidata/monpctl25"

for i in "$path1"/*.nc; do
    for v in "$path2"/*.nc; do    
        cdo -a sub "$i" "$v" "/work/bk1088/b382227/pidata/IQR-75sub25/${i}_iqr.nc"
    done
done
huus2vyu

huus2vyu2#

我假设您希望将path 1中的一个文件与path 2中的相应文件进行匹配(而不是所有path 1文件和path 2文件的叉积)。

#!/bin/bash

pidata=/work/bk1088/b382227/pidata
files1=( "$pidata"/monpctl75/*.nc )
files2=( "$pidata"/monpctl25/*.nc )

for idx in "${!files1[@]}"; do
    i=${files1[idx]}
    v=${files2[idx]}

    # strip the path and the extension from $i
    iqr=${i##*/}
    iqr=${iqr%.nc}

    cdo -a sub "$i" "$v" "$pidata/IQR-75sub25/${iqr}_iqr.nc"
done

为了解释"${!files[@]}",从3.5.3手册中的 shell 参数展开:
${!name[@]}
${!name[*]}
如果 name 是一个数组变量,则扩展到 name 中分配的数组索引(键)列表。如果 name 不是数组,则如果设置了 name,则扩展为0,否则为null。当使用“@”并且展开出现在双引号内时,每个键都展开为一个单独的单词。

相关问题