【发布时间】:2013-09-15 15:59:54
【问题描述】:
我最近刚开始使用 UNIX,但在尝试实现 getopts 时遇到了问题。
下面的函数找到一个文件,然后将其删除到回收站,尽管我正在尝试使用带有 -i 的 getopts,它会在移动后显示一条消息。语法工作正常,但是当我使用 getotps 命令实现 while 循环时,它不再工作。
谁能给点有用的建议,不胜感激
function moveToBin(){
while getopts i opt
do
case $opt in
i) echo "file removed!" ;;
esac
done
if [[ -e $1 ]]; then
inode=$(ls -i $i | cut -d " " -f1)
name=$1_$inode
pathOfFile=$(pwd $1)
restoreEntry=$1_$inode:$pathOfFile/$1
mv $1 ~/deleted
mv ~/deleted/$1 ~/deleted/$name
echo "Before extension code"
extension=$(find ~ -inum $inode)
fi
【问题讨论】:
-
我对在函数中使用
getopts持谨慎态度。在getopts循环之后,您需要shift $(($OPTIND - 1))删除getopts处理的选项。然后你需要检查是否有一个$1剩余(如果还有一个$2,你的函数应该做什么——你是否应该在if周围有一个for file in "$@"循环,或者你应该检查并拒绝额外的参数?如果您发布完整的函数会更令人放心;您的代码至少缺少}并且谁知道还有什么。最好在文件名参数周围使用双引号以防止出现空格。跨度>