mirror of
				git://git.code.sf.net/p/zsh/code
				synced 2025-10-31 06:00:54 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			216 lines
		
	
	
	
		
			7.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			216 lines
		
	
	
	
		
			7.3 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| texinode(Conditional Expressions)(Prompt Expansion)(Arithmetic Evaluation)(Top)
 | |
| chapter(Conditional Expressions)
 | |
| ifzman(\
 | |
| sect(Conditional Expressions)
 | |
| )\
 | |
| cindex(conditional expressions)
 | |
| cindex(expressions, conditional)
 | |
| A em(conditional expression) is used with the tt([[)
 | |
| compound command to test attributes of files and to compare strings.
 | |
| Each expression can be constructed from one or more
 | |
| of the following unary or binary expressions:
 | |
| 
 | |
| startitem()
 | |
| item(tt(-a) var(file))(
 | |
| true if var(file) exists.
 | |
| )
 | |
| item(tt(-b) var(file))(
 | |
| true if var(file) exists and is a block special file.
 | |
| )
 | |
| item(tt(-c) var(file))(
 | |
| true if var(file) exists and is a character special file.
 | |
| )
 | |
| item(tt(-d) var(file))(
 | |
| true if var(file) exists and is a directory.
 | |
| )
 | |
| item(tt(-e) var(file))(
 | |
| true if var(file) exists.
 | |
| )
 | |
| item(tt(-f) var(file))(
 | |
| true if var(file) exists and is a regular file.
 | |
| )
 | |
| item(tt(-g) var(file))(
 | |
| true if var(file) exists and has its setgid bit set.
 | |
| )
 | |
| item(tt(-h) var(file))(
 | |
| true if var(file) exists and is a symbolic link.
 | |
| )
 | |
| item(tt(-k) var(file))(
 | |
| true if var(file) exists and has its sticky bit set.
 | |
| )
 | |
| item(tt(-n) var(string))(
 | |
| true if length of var(string) is non-zero.
 | |
| )
 | |
| item(tt(-o) var(option))(
 | |
| true if option named var(option) is on.  var(option)
 | |
| may be a single character, in which case it is a single letter option name.
 | |
| (See noderef(Specifying Options).)
 | |
| )
 | |
| item(tt(-p) var(file))(
 | |
| true if var(file) exists and is a FIFO special file (named pipe).
 | |
| )
 | |
| item(tt(-r) var(file))(
 | |
| true if var(file) exists and is readable by current process.
 | |
| )
 | |
| item(tt(-s) var(file))(
 | |
| true if var(file) exists and has size greater than zero.
 | |
| )
 | |
| item(tt(-t) var(fd))(
 | |
| true if file descriptor number var(fd)
 | |
| is open and associated with a terminal device.
 | |
| (note: var(fd) is not optional)
 | |
| )
 | |
| item(tt(-u) var(file))(
 | |
| true if var(file) exists and has its setuid bit set.
 | |
| )
 | |
| item(tt(-w) var(file))(
 | |
| true if var(file) exists and is writable by current process.
 | |
| )
 | |
| item(tt(-x) var(file))(
 | |
| true if var(file) exists and is executable by current process.
 | |
| If var(file) exists and is a directory, then the current process
 | |
| has permission to search in the directory.
 | |
| )
 | |
| item(tt(-z) var(string))(
 | |
| true if length of var(string) is zero.
 | |
| )
 | |
| item(tt(-L) var(file))(
 | |
| true if var(file) exists and is a symbolic link.
 | |
| )
 | |
| item(tt(-O) var(file))(
 | |
| true if var(file) exists and is owned by the effective user ID of this process.
 | |
| )
 | |
| item(tt(-G) var(file))(
 | |
| true if var(file) exists and its group matches
 | |
| the effective group ID of this process.
 | |
| )
 | |
| item(tt(-S) var(file))(
 | |
| true if var(file) exists and is a socket.
 | |
| )
 | |
| item(tt(-N) var(file))(
 | |
| true if var(file) exists and its access time is
 | |
| not newer than its modification time.
 | |
| )
 | |
| item(var(file1) tt(-nt) var(file2))(
 | |
| true if var(file1) exists and is newer than var(file2).
 | |
| )
 | |
| item(var(file1) tt(-ot) var(file2))(
 | |
| true if var(file1) exists and is older than var(file2).
 | |
| )
 | |
| item(var(file1) tt(-ef) var(file2))(
 | |
| true if var(file1) and var(file2) exist and refer to the same file.
 | |
| )
 | |
| xitem(var(string) tt(=) var(pattern))
 | |
| item(var(string) tt(==) var(pattern))(
 | |
| true if var(string) matches var(pattern).
 | |
| The `tt(==)' form is the preferred one.  The `tt(=)' form is for
 | |
| backward compatibility and should be considered obsolete.
 | |
| )
 | |
| item(var(string) tt(!=) var(pattern))(
 | |
| true if var(string) does not match var(pattern).
 | |
| )
 | |
| item(var(string) tt(=~) var(regexp))(
 | |
| true if var(string) matches the regular expression
 | |
| var(regexp).  If the option tt(RE_MATCH_PCRE) is set
 | |
| var(regexp) is tested as a PCRE regular expression using
 | |
| the tt(zsh/pcre) module, else it is tested as a POSIX
 | |
| extended regular expression using the tt(zsh/regex) module.
 | |
| Upon successful match, some variables will be updated; no variables
 | |
| are changed if the matching fails.
 | |
| 
 | |
| If the option tt(BASH_REMATCH) is not set the scalar parameter
 | |
| tt(MATCH) is set to the substring that matched the pattern and
 | |
| the integer parameters tt(MBEGIN) and tt(MEND) to the index of the start
 | |
| and end, respectively, of the match in var(string), such that if
 | |
| var(string) is contained in variable tt(var) the expression
 | |
| `${var[$MBEGIN,$MEND]}' is identical to `$MATCH'.  The setting
 | |
| of the option tt(KSH_ARRAYS) is respected.  Likewise, the array
 | |
| tt(match) is set to the substrings that matched parenthesised
 | |
| subexpressions and the arrays tt(mbegin) and tt(mend) to the indices of
 | |
| the start and end positions, respectively, of the substrings within
 | |
| var(string).  The arrays are not set if there were no parenthesised
 | |
| subexpresssions.  For example, if the string `tt(a short string)' is matched
 | |
| against the regular expression `tt(s+LPAR()...RPAR()t)', then (assuming the
 | |
| option tt(KSH_ARRAYS) is not set) tt(MATCH), tt(MBEGIN)
 | |
| and tt(MEND) are `tt(short)', 3 and 7, respectively, while tt(match),
 | |
| tt(mbegin) and tt(mend) are single entry arrays containing
 | |
| the strings `tt(hor)', `tt(4)' and `tt(6), respectively.
 | |
| 
 | |
| If the option tt(BASH_REMATCH) is set the array
 | |
| tt(BASH_REMATCH) is set to the substring that matched the pattern
 | |
| followed by the substrings that matched parenthesised
 | |
| subexpressions within the pattern.
 | |
| )
 | |
| item(var(string1) tt(<) var(string2))(
 | |
| true if var(string1) comes before var(string2)
 | |
| based on ASCII value of their characters.
 | |
| )
 | |
| item(var(string1) tt(>) var(string2))(
 | |
| true if var(string1) comes after var(string2)
 | |
| based on ASCII value of their characters.
 | |
| )
 | |
| item(var(exp1) tt(-eq) var(exp2))(
 | |
| true if var(exp1) is numerically equal to var(exp2).
 | |
| )
 | |
| item(var(exp1) tt(-ne) var(exp2))(
 | |
| true if var(exp1) is numerically not equal to var(exp2).
 | |
| )
 | |
| item(var(exp1) tt(-lt) var(exp2))(
 | |
| true if var(exp1) is numerically less than var(exp2).
 | |
| )
 | |
| item(var(exp1) tt(-gt) var(exp2))(
 | |
| true if var(exp1) is numerically greater than var(exp2).
 | |
| )
 | |
| item(var(exp1) tt(-le) var(exp2))(
 | |
| true if var(exp1) is numerically less than or equal to var(exp2).
 | |
| )
 | |
| item(var(exp1) tt(-ge) var(exp2))(
 | |
| true if var(exp1) is numerically greater than or equal to var(exp2).
 | |
| )
 | |
| item(tt(LPAR()) var(exp) tt(RPAR()))(
 | |
| true if var(exp) is true.
 | |
| )
 | |
| item(tt(!) var(exp))(
 | |
| true if var(exp) is false.
 | |
| )
 | |
| item(var(exp1) tt(&&) var(exp2))(
 | |
| true if var(exp1) and var(exp2) are both true.
 | |
| )
 | |
| item(var(exp1) tt(||) var(exp2))(
 | |
| true if either var(exp1) or var(exp2) is true.
 | |
| )
 | |
| enditem()
 | |
| 
 | |
| Normal shell expansion is performed on the var(file), var(string) and
 | |
| var(pattern) arguments, but the result of each expansion is constrained to
 | |
| be a single word, similar to the effect of double quotes.
 | |
| Filename generation is not performed on any form of argument to conditions.
 | |
| However, pattern metacharacters are active for the var(pattern) arguments;
 | |
| the patterns are the same as those used for filename generation, see
 | |
| ifzman(\
 | |
| zmanref(zshexpn)\
 | |
| )\
 | |
| ifnzman(\
 | |
| noderef(Filename Generation)\
 | |
| )\
 | |
| , but there is no special behaviour
 | |
| of `tt(/)' nor initial dots, and no glob qualifiers are allowed.
 | |
| 
 | |
| In each of the above expressions, if
 | |
| var(file) is of the form `tt(/dev/fd/)var(n)',
 | |
| where var(n) is an integer,
 | |
| then the test applied to the open file whose
 | |
| descriptor number is var(n),
 | |
| even if the underlying system does not support
 | |
| the tt(/dev/fd) directory.
 | |
| 
 | |
| In the forms which do numeric comparison, the expressions var(exp)
 | |
| undergo arithmetic expansion as if they were enclosed in tt($((...))).
 | |
| 
 | |
| For example, the following:
 | |
| 
 | |
| example([[ ( -f foo || -f bar ) && $report = y* ]] && print File exists.)
 | |
| 
 | |
| tests if either file tt(foo) or file tt(bar) exists, and if so, if the
 | |
| value of the parameter tt(report) begins with `tt(y)'; if the complete
 | |
| condition is true, the message `tt(File exists.)' is printed.
 |