将两个文件名存储到一个变量中,该变量可以通过索引 0 和 1 轻松访问

Store two filenames into a variable which can be easily accessed by index 0 and 1

我有两个文件名要存储在 Bash 变量中:

为此,我做了:

$ b=$(ls Fisher_GCph_WL_XSAF_COLUMN*PESS_F*gamma_*)

我得到变量 b 等于 :

$ echo $b
Fisher_GCph_WL_XSAF_COLUMN2_2_PESS_F_FoM_33.22_gamma_0.071.txt
Fisher_GCph_WL_XSAF_COLUMN2_2_PESS_F_FoM_71.91_gamma_N.txt

我想构建一个包含 2 个元素的数组,其中包含上面的 2 个文件名。

我尝试通过以下方式访问它们:

$d eclare -a b
$ echo ${b[0]}

returns没什么

$ echo ${b[1]} returns F

如何获得一个字符串数组,我可以通过索引 01 直接访问第一个或第二个文件名?

您只需要一个简单的数组赋值和通配。

shopt -s nullglob
b=(Fisher_GCph_WL_XSAF_COLUMN*PESS_F*gamma_*)

您使用的索引符号是正确的。这里的问题 b 不是数组而是多行字符串。

声明一个真正的数组:

b=("Fisher_GCph_WL_XSAF_COLUMN2_2_PESS_F_FoM_33.22_gamma_0.071.txt" "Fisher_GCph_WL_XSAF_COLUMN2_2_PESS_F_FoM_71.91_gamma_N.txt")

注意 - 元素之间没有逗号

bash 将 b 视为数组:

declare -a b='([0]="Fisher_GCph_WL_XSAF_COLUMN2_2_PESS_F_FoM_33.22_gamma_0.071.txt" [1]="Fisher_GCph_WL_XSAF_COLUMN2_2_PESS_F_FoM_71.91_gamma_N.txt")'

将其与来自 ls:

的 return 进行比较
$ c=$(ls)
$ declare -p c
declare -- c="Fisher_GCph_WL_XSAF_COLUMN2_2_PESS_F_FoM_33.22_gamma_0.071.txt
Fisher_GCph_WL_XSAF_COLUMN2_2_PESS_F_FoM_71.91_gamma_N.txt"

你的情况我会

  1. 创建中间文件:
ls -1 > filelist

这是 'one' 而不是 'l' - 每个文件一行

  1. 将文件转换为数组:
$mapfile -t b < filelist
  1. 验证 b 是一个数组:
$ declare -p b
  1. 使用数组:
echo  ${b[1]}