📜  Unix Linux-特殊变量(1)

📅  最后修改于: 2023-12-03 15:05:45.722000             🧑  作者: Mango

Unix/Linux-特殊变量

在Unix/Linux系统上,有许多特殊的变量,它们可以为程序员提供很多方便。本文将介绍其中一些常用的特殊变量。

1. $0

$0 变量包含当前正在运行的脚本或命令的名称。例如,如果我们运行一个名为 script.sh 的脚本,那么 script.sh 就是 $0 的值。

#!/bin/bash

echo "The name of this script is: $0"

输出:

The name of this script is: script.sh
2. $#

$# 变量用于获取命令行参数的数量。例如,如果我们运行 ./script.sh arg1 arg2 arg3,那么 $# 的值将是 3

#!/bin/bash

echo "The number of command-line arguments is: $#"

输出:

The number of command-line arguments is: 3
3. $1, $2, $3, ...

$1, $2, $3 ... 变量用于获取命令行参数的值。例如,如果我们运行 ./script.sh arg1 arg2 arg3,那么 $1 的值将是 arg1$2 的值将是 arg2,以此类推。

#!/bin/bash

echo "The first argument is: $1"
echo "The second argument is: $2"
echo "The third argument is: $3"

输出:

The first argument is: arg1
The second argument is: arg2
The third argument is: arg3
4. $?

$? 变量用于获取上一条命令的退出状态。如果命令执行成功,则 $? 的值将是 0,否则将是一个非零值。

#!/bin/bash

ls
echo "The exit status of the ls command is: $?"

rm file_that_does_not_exist
echo "The exit status of the rm command is: $?"

输出:

Desktop  Documents  Downloads  Music  Pictures  Public  Templates  Videos
The exit status of the ls command is: 0
rm: cannot remove 'file_that_does_not_exist': No such file or directory
The exit status of the rm command is: 1
5. $$

$$ 变量包含当前进程的进程号。

#!/bin/bash

echo "The process ID of this script is: $$"

输出:

The process ID of this script is: 1234
6. $!

$! 变量包含最后一个后台作业的进程号。

#!/bin/bash

sleep 10 &
echo "The process ID of the sleep command is: $!"

输出:

The process ID of the sleep command is: 1234
7. $@

$@ 变量用于将所有命令行参数作为一个单词列表传递给脚本。这个变量将把每个参数看作一个单独的单词,用空格分隔。

#!/bin/bash

for var in "$@"
do
    echo "$var"
done

输出:

arg1
arg2
arg3
8. $*

$* 变量与 $@ 类似,也用于将命令行参数作为一个单词列表传递给脚本,不过它将所有参数看作一个单词,用第一个 IFS 变量的值分隔。默认情况下,IFS 是一个空格。

#!/bin/bash

for var in "$*"
do
    echo "$var"
done

输出:

arg1 arg2 arg3
结论

这里我们总结了 Unix/Linux 系统上的一些常用的特殊变量。程序员们可以利用这些变量,使其脚本和程序更加清晰、简洁。