📄 shift.def
字号:
This file is shift.def, from which is created shift.c.It implements the builtin "shift" in Bash.Copyright (C) 1987-2009 Free Software Foundation, Inc.This file is part of GNU Bash, the Bourne Again SHell.Bash is free software: you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation, either version 3 of the License, or(at your option) any later version.Bash is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with Bash. If not, see <http://www.gnu.org/licenses/>.$PRODUCES shift.c#include <config.h>#if defined (HAVE_UNISTD_H)# ifdef _MINIX# include <sys/types.h># endif# include <unistd.h>#endif#include "../bashansi.h"#include "../bashintl.h"#include "../shell.h"#include "common.h"$BUILTIN shift$FUNCTION shift_builtin$SHORT_DOC shift [n]Shift positional parameters.Rename the positional parameters $N+1,$N+2 ... to $1,$2 ... If N isnot given, it is assumed to be 1.Exit Status:Returns success unless N is negative or greater than $#.$ENDint print_shift_error;/* Shift the arguments ``left''. Shift DOLLAR_VARS down then take one off of REST_OF_ARGS and place it into DOLLAR_VARS[9]. If LIST has anything in it, it is a number which says where to start the shifting. Return > 0 if `times' > $#, otherwise 0. */intshift_builtin (list) WORD_LIST *list;{ intmax_t times; register int count; WORD_LIST *temp; if (get_numeric_arg (list, 0, ×) == 0) return (EXECUTION_FAILURE); if (times == 0) return (EXECUTION_SUCCESS); else if (times < 0) { sh_erange (list ? list->word->word : NULL, _("shift count")); return (EXECUTION_FAILURE); } else if (times > number_of_args ()) { if (print_shift_error) sh_erange (list ? list->word->word : NULL, _("shift count")); return (EXECUTION_FAILURE); } while (times-- > 0) { if (dollar_vars[1]) free (dollar_vars[1]); for (count = 1; count < 9; count++) dollar_vars[count] = dollar_vars[count + 1]; if (rest_of_args) { temp = rest_of_args; dollar_vars[9] = savestring (temp->word->word); rest_of_args = rest_of_args->next; temp->next = (WORD_LIST *)NULL; dispose_words (temp); } else dollar_vars[9] = (char *)NULL; } return (EXECUTION_SUCCESS);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -