函数退出 #
函数退出状态:0(成功),非零(非正常,失败)
引号 #
双引号中使用转义字符可以防止展开
这意味着单词分割(空格制表换行分割单词)、路径名展开(*星号)、波浪线展开和花括号展开都将失效,然而参数展开、
算术展开和命令替换仍然执行
echo "text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER" #禁止部分
text ~/*.txt {a,b} foo 4 me
echo 'text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER' #全部禁止
text ~/*.txt {a,b} $(echo foo) $((2+2)) $USER
各种操作符 #
[ expression ] / test | [[ expression ]] | $(( expression )) | $var | $( termi ) |
---|---|---|---|---|
文件表达式 -e file,字符串表达式 -n string,整数表达式 integer1 -eq integer2 | test增强,增加 [ str =~ regex ],增加 == [[ $FILE == foo.* ]] | 整数加减乘除取余 | 取变量 | 执行命令/函数 |
termi取变量$必加,里面被看作命令参数,< > ( ) 必须转义 否则 小于号 < 大于号>被认为重定向 | 与[ ] 一致 | 取变量$可加可不加 | termi取变量$必加 | |
if [ -x "$FILE" ] #引号可以防止空参数,空值。而""被解释成空字符串