我对访问目录中的文件名有疑问。
#!/bin/bash
INPUT_DIR=/home/user/TestDir
files=$INPUT_DIR/*txt
echo $files
FileA.txt FileB.txt
但是这是什么样的物体?如果我使用数组语法访问
echo "${files[1]}"
返回的值为空。
答案 0 :(得分:2)
首先,您拥有的不是正则表达式。 shell涉及*
的扩展称为Filename Expansions,也称为“全局”扩展。
您不是使用数组来保存内容,而是使用标量类型。当您将glob表达式分配给变量时,它是“字面意义上的”分配,并且当您使用echo
进行无引号的扩展时,shell首先扩展变量,然后将glob扩展为其结果文件。但是请记住,默认情况下,变量为标量类型,它们只能包含一个值。对于多个值,您需要数组。
inputDir=/home/user/TestDir
files=( "$inputDir"/*txt)
printf '%s\n' "${files[@]}"
可以使用"${files[@]}"
访问元素列表(此处的双引号很重要),而单个元素可以访问"${files[0]}"
。但是,使用数组的东西不再支持POSIX,因为它们在这些Shell中受支持。
也不要在用户脚本中为变量名使用大写字母。大写的变量名具有特殊含义,仅供外壳程序使用。
答案 1 :(得分:0)
您的take(5)
变量是字符串,而不是数组。
如果您希望文件成为数组,则必须编写
files