使用“set”命令的简单Bash脚本

4

我需要编写一个脚本,以“set”命令为基础,按大小顺序打印当前目录中所有文件的大小和文件名。

#!/bin/bash

touch /tmp/unsorted

IFS='@'
export IFS

ls -l | tr -s " " "@" | sed '1d' > /tmp/tempLS

while read line
do
    ##set probably goes here##
    echo $5 $9 >> /tmp/unsorted
done < /tmp/tempLS

sort -n /tmp/unsorted
rm -rf /tmp/unsorted

根据逻辑,这应该是一个有效的脚本,但它只会产生空白行。 在与同学讨论后,我们认为“set”命令必须放在while循环的最前面。问题是我们不知道“set”命令是做什么用的,也不知道如何使用它。请帮忙解答,谢谢。


你期望$5是什么,并且你想要做什么? - Karoly Horvath
$5 是文件大小,$9 是文件名。 - alf
1
请注意,如果文件名中有空格,则它将不会完全包含在$9中。 - glenn jackman
2个回答

7
ls -l | while read line; do
  set - $line
  echo $5 $9
done | sort -n

或者仅仅是
ls -l | awk '{print $5, $9}' | sort -n

它可以使用 set -set -- 正常工作。感谢您的帮助! - alf

3

Set命令用于操作shell变量。这使您可以针对特定情况调整当前环境,例如调整当前的globbing规则。

有时在脚本中需要调整环境,以便稍后可以正确设置选项。由于脚本运行在子shell中,因此您所调整的选项将不会影响脚本之外的环境。

此链接提供了大量关于可用命令和选项的信息。


谢谢Spencer,我在谷歌搜索“set”时阅读了这个页面。但是我想不到任何可以操作的变量。 - alf
@alf 变量列表在页面顶部的语法链接下。或者您可以在终端中检查 bash man 页面以获取更完整的列表。 - Spencer Rathbun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接