Shell功能删除CSV不起作用?

时间:2014-10-29 18:35:12

标签: bash function shell unix

我有一些shell命令从指定目录中删除所有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

2 个答案:

答案 0 :(得分:1)

您需要更改:

if [ "{f: -3}" == 'csv' ]; then

到此:

if [ "${f: -3}" == 'csv' ]; then

您的功能可以写成:

csv() { for f in $1; do [[ "${f: -3}" == 'csv' ]] && rm "$f"; done; }

并将其称为注释引用$x

x=/path/*
csv "$x"

答案 1 :(得分:1)

Bash在解析shell函数调用之前扩展变量引用。结果是匹配您的glob的每个文件成为函数csv()的单独参数,但该函数仅考虑第一个。这种变化应该有效:

csv(){
  for f in "$@"
  do
    if [ "${f: -3}" == 'csv' ]; then
    rm $f
    fi
  done 
}