将两个文件名存储到一个变量中,该变量可以通过索引 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
如何获得一个字符串数组,我可以通过索引 0
或 1
直接访问第一个或第二个文件名?
您只需要一个简单的数组赋值和通配。
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"
你的情况我会
- 创建中间文件:
ls -1 > filelist
这是 'one' 而不是 'l' - 每个文件一行
- 将文件转换为数组:
$mapfile -t b < filelist
- 验证 b 是一个数组:
$ declare -p b
- 使用数组:
echo ${b[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
如何获得一个字符串数组,我可以通过索引 0
或 1
直接访问第一个或第二个文件名?
您只需要一个简单的数组赋值和通配。
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"
你的情况我会
- 创建中间文件:
ls -1 > filelist
这是 'one' 而不是 'l' - 每个文件一行
- 将文件转换为数组:
$mapfile -t b < filelist
- 验证 b 是一个数组:
$ declare -p b
- 使用数组:
echo ${b[1]}