替换
=号的左右两边都不能有空白符 在同一行里用空白字符隔开为多个变量赋值是可以的,可能减少可读性,并且可能是不可移植的 把变量引起来会保留空白字符 一个未初始化的变量没有值,但是似乎它在算术计算中的值是零
a = "A b C d" b =
echo "$a "
echo $a
echo $(( b+ 5 ))
echo a\ tbc
echo "a\t bc"
echo -e a\ tbc
echo -e "a\t bc"
IFS = '\'
var = "'(]\\ {}\$\" "
echo $var
echo "$var "
赋值
a = 123
echo $a
let a = 1 +2
for a in 1 2 3 4
do
echo -n "$a "
done
echo "$a "
read a
123
echo "$a "
VAR = "Hello"
a = ` echo "$VAR " ` b = $( echo "$VAR " )
echo "$a " "$b "
局部变量
#! /bin/bash
a = 123
function print ( ) {
local a = 456
echo $a
}
print
echo $a
sh tmp.sh
: "" "
输出:
456
123
"" "
环境变量
每次一个Shell启动时,它都会创建新的合适的环境变量 如果它增加或是更新一个环境变量,都会使这个Shell的环境表得到更新 后继生成的子进程会继承Shell的新环境变量
#! /bin/bash
echo $a >> tmp
a = 123
sh ~/subshell.sh &
export a = 456
sh ~/subshell.sh &
unset a
: > tmp
sh tmp.sh
cat tmp
: "" "
输出:
456
"" "
位置参数
#! /bin/bash
echo $0
echo $1
echo $2
echo $3
echo $4
echo $5
echo $6
echo $7
echo $8
echo $9
echo ${10}
sleep 2 &
sleep 2 &
echo $!
echo $?
echo $*
echo $$
echo $#
echo $@
args = $#
echo ${! args}
sh tmp.sh 1 2 3 4 5 6 7 8 9 10
位置参数左移(shift)
#! /bin/bash
until [ -z $1 ]
do
echo $1
shift
done
sh tmp.sh 1 2 3 4 5 6 7 8 9 10