我有一些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
答案 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
}