壳牌功能删除CSV的不工作?
问题描述:
我有几个shell命令从给定的目录中删除所有的CSV。但是,当我尝试将这些函数放入函数中时,它们似乎并不奏效,但我无法弄清楚原因。壳牌功能删除CSV的不工作?
#works
p=/path/*
for f in $p
do
if [ "${f: -3}" == 'csv' ]
then
rm $f
fi
done
#Doesn't work
csv(){
t=$1
for f in $t
do
if [ "{f: -3}" == 'csv' ]; then
rm $f
fi
done
}
x=/path/*
#doesn't work
csv $x
答
你需要改变:
if [ "{f: -3}" == 'csv' ]; then
这样:
if [ "${f: -3}" == 'csv' ]; then
你的函数可以写成这样:
csv() { for f in $1; do [[ "${f: -3}" == 'csv' ]] && rm "$f"; done; }
,并调用它的,注意左右的报价:
x=/path/*
csv "$x"
答
猛砸扩展了您的变量引用之前解决的外壳函数调用。结果是每个与您的glob匹配的文件都成为函数csv()
的单独参数,但该函数仅考虑第一个函数。这种变化应该工作:
csv(){
for f in "[email protected]"
do
if [ "${f: -3}" == 'csv' ]; then
rm $f
fi
done
}
+0
请注意,这个版本打算在你的例子中被调用, *没有*引用参数。它也适用于多个显式参数。它也可以处理包含空格的文件名,如果你小心你的调用方式。 – 2014-10-29 18:48:21
'$ 1'只会包含第一个文件名。试试't = $ @'。为了这个工作,你的文件名不能有空格。最好是编写你的循环,比如'for f;做......这将循环每个输入。 – ooga 2014-10-29 18:40:28
为什么不使用'find'命令? 'find/path/-maxdepth 1 -type f -name'* .csv'-delete'(或者没有'-maxdepth 1' * by * recursive *) – 2014-10-29 18:44:33