我是bash编程的新手。这是我的完整问题:编写一个带有成对参数的shell脚本(文件名和数字 n)并且对于每一对将验证文件的大小是否等于数字n。
这是我试图做的事情:
#!/bin/bash
for i in {$1..${@:(-2):1}..2}
do
for j in {$2..${@: -1}..2}
do
if [$(stat -c%s "$i") -eq $j ]
then
echo $i is $j
else
echo $i is NOT $j
fi
done
done
我试图将每对中的文件名和变量i放入每对中的数字n中。然后我将我的文件大小与j(数字n)进行比较。 我不确定我做错了什么,我做了一些研究并测试了我的代码部分以查看它是否有效但是我的for语句有问题,因为它打印整个。输出:
[: -eq: unary operator expected
{c.s..c.s..2} is NOT {12..12..2}
谢谢。
答案 0 :(得分:0)
在任何其他扩展之前执行大括号扩展,并且在结果中保留对其他扩展特殊的任何字符。这是严格的文字。 Bash不对扩展的上下文或大括号之间的文本应用任何语法解释。
但这仅适用于bash
。在ksh
和zsh
,这可行:
$ bash -c 'foo=2; for i in {1..$foo}; do echo $i; done'
{1..2}
$ zsh -c 'foo=2; for i in {1..$foo}; do echo $i; done'
1
2
$ ksh -c 'foo=2; for i in {1..$foo}; do echo $i; done'
1
2