我想使用 awk 将大小写入变量,但它始终保持等于 0

我想使用 awk 将大小写入变量,但它始终保持等于 0

我想使用以下表达式将数字写入变量 val=$(ls -al $1 | awk -v a=$i '{if( NR == a ) print $5}') ,但对于每个 i,它都会以类似的表达式返回 0,它会毫无问题地写入文件名

答案1

您似乎想打印当前目录中的第五个名称。

正确的方法是

shopt -s dotglob
set -- *
printf '%s\n' "$5"

这会将位置参数设置为扩展*文件名通配模式所产生的列表(包括隐藏名称,因为我们还设置了dotglobshell 选项)。第 5 个位置参数 ,$5将保存按字典顺序排序在位置 5 的名称。如果目录包含的名称少于 5 个,则上面将打印一个空行。

名称是否包含空格、制表符或换行符并不重要。

要将名称分配给变量,请使用

val=$5

您是否想从当前目录之外的另一个目录的内容中选择名称,例如一个目录$dir,然后用作"$dir"/*模式。

您想要文件的大小而不是名称,然后使用stat它:

stat -c %s "$5"

或者,要分配给变量,

val=$( stat -c %s "$5" )

上面假设 GNUstat并会给出文件的大小(以字节为单位)(假设它存在)。

如果您想使用命名数组而不是破坏位置参数,请使用例如

names=( "$dir"/* )

"${names[4]}"然后使用(数组从 shell 中的索引零开始)获取第五个名称bash

相关内容