我是AWK的新手并尝试编写一些代码,我可以删除目录中除最新N号之外的所有文件。 如果我使用硬编码而不是变量,我的代码可以工作。 工作原理:
delete=`ls -t | awk 'NR>3'`
echo $delete
不起作用:
amount=3
delete=`ls -t | awk 'NR>$amount'`
echo $delete
我知道问题出在某处,bash变量不被识别为awk变量,但我不知道如何纠正。 我已尝试过各种代码来解决这个问题,如下所示,但我仍然处于亏损状态。
amount=3
delete=`ls -t | awk -v VAR=${amount} 'NR>VAR'`
echo $delete
您能告诉我们正确的代码是什么吗?
答案 0 :(得分:4)
Shells不会在单引号内扩展任何内容。
或者:
amount=3
delete=$(ls -t | awk "NR>$amount")
或:
amount=3
delete=$(ls -t | awk -v amount=$amount 'NR > amount')
请注意,如果您的文件名不限于便携式文件名字符集,则解析ls
的输出很困难。文件名中的空格,换行符和其他特殊字符可能会破坏解析。
答案 1 :(得分:1)
最简单的解决方法是使用双引号而不是单引号。单引号可防止shell在引用的字符串中插入变量read()
。
close()
我不会使用变量来捕获结果。如果你确实使用了一个,你需要在插值时正确引用它。
$amount
请注意,这与您的第二次尝试基本相同,这应该是有效的,以字符串引用问题为模。