SH脚本 - 传递带空格的变量(文件名)

时间:2014-05-23 13:25:43

标签: bash shell awk sh

老实说,我对自己有点失望,但我花了几个小时试图成功地搜索它。许多主题都涉及到这个主题,但我无法达成解决方案。

我有一个'sh'脚本(在busybox上或我使用完全bash)。

该脚本在外部调用并传递3个变量($ 1,$ 2,$ 3),其中:

$1 directory of file
$2 not used
$3 name of file including directory

我正在尝试获取文件大小(统计信息不可用)所以我正在尝试使用du:

伪:

filesize=$(du $3 | awk '{ print $1 }')

我无法让脚本正确处理带空格的文件名。 我试过引用并逃避引用无济于事。 在命令提示符下,我可以注入\来处理du的空白区域。

非常感谢帮助。

3 个答案:

答案 0 :(得分:3)

双引号效果为sh

sh-3.2$ f="a b"
sh-3.2$ echo aaaa > "$f"
sh-3.2$ ls -l "a b"
-rw-r--r--  1 xxxx  xxxxx  5 May 23 xx:xx a b
sh-3.2$ du "$f"
8   a b

答案 1 :(得分:1)

尝试

    filesize=`du "$3" | awk '{ print $1 }'`

答案 2 :(得分:0)

我非常感谢那些花时间就这个问题提供一些想法的人。经过长时间的努力,确定busybox的实施是罪魁祸首。

如果使用了更新版本的bb(或任何完整的发行版),上面提供的所有内容都是有效的。不幸的是,为了达到这个目的,需要进行大量的反复试验。