在shell脚本中将多个文件路径合并为一个



我以前没有在bash中编码或制作shell脚本。下面的代码现在在shell脚本中为我工作。Ashlar是一个python库,它可以进行多个图像拼接和配准。我的问题是我如何在最后一行只写一个变量而不是$c1 $c3 $c5 $c7。我试过使用+或cat,但它不起作用。

for i in 1 3 5 7
do
export ROOT_DIR=a/b/c/abcd_"$i"_123/
export FILENAME_HEADER=a_b_c_40X_
export WIDTH=5
export HEIGHT=15
export PIXEL_SIZE=0.1507
export OVERLAP=0.1
export LAYOUT=snake
export DIRECTION=vertical
export MAX_SHIFT=30
export SIGMA=2
export ALIGN_CHANNEL=4
export OUTPUT_DIR=a/b/c/sample.ome.tiff
export c"$i"="fileseries|""$ROOT_DIR""|pattern=""$FILENAME_HEADER"""$i"_F{series}.ome.tiff|width=""$WIDTH""|height=""$HEIGHT""|pixel_size=""$PIXEL_SIZE""|overlap=""$OVERLAP""|layout=""$LAYOUT""|direction=""$DIRECTION"
done
ashlar $c1 $c3 $c5 $c7 --flip-y --pyramid --maximum-shift $MAX_SHIFT --filter-sigma $SIGMA --align-channel $ALIGN_CHANNEL -o $OUTPUT_DIR

不要使用带编号的变量,使用数组:

c=()
for i in 1 3 5 7
do
export ROOT_DIR="a/b/c/abcd_${i}_123/"
...
c+=( "fileseries|${ROOT_DIR}|pattern=${FILENAME_HEADER}${i}_F{series}.ome.tiff|width=${WIDTH}|height=${HEIGHT}|pixel_size=${PIXEL_SIZE}|overlap=${OVERLAP}|layout=${LAYOUT}|direction=${DIRECTION}" )
#^^^ .............................................................................................................................................................................................. ^
done

然后

ashlar "${c[@]}" --flip-y --pyramid --maximum-shift "$MAX_SHIFT" --filter-sigma "$SIGMA" --align-channel "$ALIGN_CHANNEL" -o "$OUTPUT_DIR"
# .....^^^^^^^^^

一些注意事项:

  • 我使用大括号来描述变量,而不是多个引号。这是一个风格偏好。
  • 不是所有变量需要导出:只有ashlar程序使用的那些。你可以直接输入var=value来使用shell变量。
  • 引用变量。参见bash/POSIX shell中忘记引用变量的安全含义

最新更新