찾다
컴퓨터 튜토리얼컴퓨터 지식Linux 쉘 스크립트에서 특수 문자의 의미는 무엇입니까?

Linux Shell 스크립트에는 다양한 의미와 반환 값을 나타내는 일부 특수 매개변수가 미리 정의되어 있습니다. 아래에 하나씩 요약되어 있습니다.

1. [$0]: 스크립트 이름

$0返回当前执行的shell脚本的名称。

2.【1-9】:命令行参数1到9

$1-$9这9个分别代表脚本执行命令第一个参数、第二个参数、第三个参数……第9个参数。

例如,假设我们有一个名为 test.sh 的Shell脚本,它的内容如下:

#!/bin/bash

echo "Script name: $0"
echo "First argument: $1"
echo "Second argument: $2"

在运行脚本时,我们可以给它传递两个参数,比如:

./test.sh hello world

这时候脚本会输出:

Script name: test.sh
First argument: hello
Second argument: world

说明 代表脚本名,1 代表第一个参数,$2代表第二个参数。

3.【 $#】:参数个数

它表示所有参数的个数。

#!/bin/bash

echo "Number of arguments: $#"

运行脚本 ./test.sh hello world,输出 Number of arguments: 2

4. 【$*】:所有参数

$*表示所有参数。

#!/bin/bash

echo "All arguments: $*"

运行脚本 ./test.sh hello world,输出 All arguments: hello world

5. 【$@】:所有参数

$@也表示所有参数:

#!/bin/bash

echo "All arguments: $@"

运行脚本 ./test.sh hello world,输出 All arguments: hello world

上面$*和$@都是用来获取所有脚本参数的特殊变量。它们之间的区别在于,如何将参数作为单个字符串或多个独立字符串进行处理。

  • $*会把所有的参数解释成一个单词(单个字符串),即每个参数之间不会加上空格,全部组合成一个字符串,用IFS(默认是空格)分隔。所以,将*放在双引号里,预处理$符号,保持长字符串的完整性:
#!/bin/bash

echo "Using $*:"
for arg in "$*"; do
echo $arg
done
  • $@会把所有的参数看成是独立的单词(多个独立的字符串),即每个参数之间加上空格,将每个参数作为一个独立的字符串处理。
#!/bin/bash

echo "Using $@:"
for arg in "$@"; do
echo $arg
done

下面我们可以通过一个示例来理解两者的区别。假设我们有一个shell脚本,名为 test.sh 并拥有以下内容:

#!/bin/bash

echo "Using $*:"
for arg in "$*"; do
echo $arg
done

echo "Using $@:"
for arg in "$@"; do
echo $arg
done

然后,在终端上执行以下命令:

$ ./test.sh one two three

当我们执行脚本时,输出如下所示:

Using $*:
one two three
Using $@:
one
two
three

我们可以看到,使用时,所有参数都解释为单个字符串,由空格分隔。

而使用@时,每个参数都被解释为一个单独的字符串,并独立处理。

在大多数情况下,使用$@是更加灵活和安全的选项,因为它可以独立处理每个参数,而不会将它们合并为单个字符串。

6. 【$?】:上一个命令的退出状态码

#!/bin/bash

ls /
echo "Exit status code: $?"

由于ls /应该会执行成功,因此运行脚本后输出 Exit status code: 0,表示上一个命令执行成功。

7. 【$$】:当前进程ID号

$$ 是一个特殊的变量,用于获取当前正在运行的Shell脚本的进程ID(PID)

这个变量对于在Shell脚本中跟踪和识别进程非常有用,或者将PID用于生成唯一的临时文件名。

以下是一个简单的示例脚本,它使用$$变量来创建一个唯一的临时文件名:

#!/bin/bash

tempfile=/tmp/myprog.$$

echo "Program is running with PID $$."
echo "Temp filename is $tempfile."

#rest of the script goes here...

在上述示例中,我们使用了$$变量来创建一个唯一的文件名,将其存储在$tempfile变量中,并在控制台输出当前脚本运行的进程ID。这个唯一的文件名将被用于存储程序输出或其他的过程。

使用$$变量时,需要注意它只能获取当前Shell脚本的PID而不能获取任何子进程或后台任务的PID

8. 【$!】:最近一次在后台运行的进程的PID号

在Linux Shell脚本中,!是一个特殊变量,用于获取最近一次在后台运行的进程的PID号(进程ID号)。

通常用于在脚本中启动后台进程,并且需要获取后台进程的PID号。

以下是一个示例脚本 test.sh,它使用&运算符来将程序启动到后台运行,并使用$!变量获取需要的PID号:

#!/bin/bash

echo "Starting background process..."
sleep 5 &
background_pid=$!
echo "The background process PID is: $background_pid"

上述脚本中的sleep命令会在后台执行5秒钟,并执行$!将其PID号赋值给变量background_pid

最后,脚本会输出后台进程的PID号。

执行该脚本的命令是:./test.sh,其输出如下:

Starting background process...
The background process PID is: 12345

其中,12345应该是实际执行中sleep进程的PID号,其值随机。

9. 【$-】:获取当前Shell的选项标志

$- 是一个特殊变量,用于获取当前Shell的选项标志(Option Flags)。选项标志是Shell用来控制其行为的一些特殊设置。

$- 可以用来获取当前Shell所使用的选项标志,通常应用于Shell脚本的调试中,可以帮助我们诊断问题。

以下是一个示例脚本 test.sh,它使用$-变量获取当前Shell的选项标志及其含义:

#!/bin/bash

echo "Value of $-: $-"

上述脚本中,echo命令会输出当前Shell的选项标志。

执行该脚本的命令是:./test.sh,其输出如下:

Value of $-: himBH

上述输出中,选项标志中包含了5个字符,分别表示以下内容:

  • hbash shell启用hash命令时将完成命令名和缓存条目之间的HASH值打印到标准错误输出中;
  • i:交互模式运行,即标准输入与终端相连;
  • m:启用作业控制功能;
  • B:启用Brace Expansion(花括号扩展)机制;
  • HShell扩展历史记录功能,寻找法:$HOME/.bash_history,如果该文件不存在则新建一个。

10. 【$IFS】:指定Shell脚本中的字段分隔符

$IFS是一个特殊变量,用于指定Shell脚本中的字段分隔符。字段分隔符是将一行输入或输出按照不同的字段拆分开来并存储在不同的变量中的标记。

默认情况下,$IFS的值为空格,制表符和换行符。但是,我们可以将其设置为其他的分隔符来满足特定的需求。

以下是一个示例脚本 test.sh,它使用$IFS变量来指定不同的分隔符,将一行输入按照分隔符分成不同的变量:

#!/bin/bash

echo "Enter a line of values separated by commas (','):"
read line

echo "Default IFS values: '$IFS'"
IFS=","
echo "Custom IFS value set to: '$IFS'"

echo "Values entered:"
for value in $line
do
echo "$value"
done

上述脚本中,通过read命令读取一行输入,并通过将$IFS设置为逗号来将输入行分隔成不同的变量。最后,使用for循环按顺序输出不同的变量。

执行该脚本的命令是:./test.sh,它会提示用户输入一个以逗号分隔的值列表。然后,它将逗号设置为分隔符并按顺序输出每个值。下面是一些示例输入和输出:

输入:

a,b,c,d,e

输出:

Default IFS values: 'n'
Custom IFS value set to: ','
Values entered:
a
b
c
d
e

在上述输出中,$IFS的初始值为默认值(空格、制表符、换行符),该输入字符串以逗号分隔,然后按逗号分隔的方式打印每个值。

这是一个非常有用的用法,可以将一行以逗号或其他字符分隔的值按分隔符分成不同的变量,进一步处理这些变量值。

关于shell中这10个特殊变量,总结如下:

Linux shell脚本中特殊字符含义有哪些

위 내용은 Linux 쉘 스크립트에서 특수 문자의 의미는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 每日运维에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
Securebootencodeuefi.exe Trojan을 제거하는 방법?Securebootencodeuefi.exe Trojan을 제거하는 방법?Apr 13, 2025 am 12:50 AM

일부 Windows 11/10 사용자는 BitDefender 업데이트 직후 CMD 창이 열리고 SecureBootencodeuefi.exe를 실행하고 있다고보고합니다. Php.cn 의이 게시물은 Securebootencodeuefi.exe Trojan을 제거하는 방법을 소개합니다.

수정 : sysdll_win64_retail.dll 누락 또는 찾을 수 없음 오류 -Minitool수정 : sysdll_win64_retail.dll 누락 또는 찾을 수 없음 오류 -MinitoolApr 13, 2025 am 12:48 AM

sysdll_win64_retail.dll은 FIFA 17 응용 프로그램과 관련된 동적 링크 라이브러리 (DLL) 파일입니다. 해당 파일이 놓치거나 손상되면 해당 응용 프로그램에 대한 일련의 문제와 오류가 발생합니다. 이 문제를 해결하려면이 기사를 읽을 수 있습니다

EW_USBCCGPFILTER.SYS에 의해 코어 격리가 차단됩니까? 다음은 수정 사항입니다!EW_USBCCGPFILTER.SYS에 의해 코어 격리가 차단됩니까? 다음은 수정 사항입니다!Apr 13, 2025 am 12:47 AM

많은 Surfacebook 사용자는 Windows 11/10에서 "EW_USBCCGPFILTER.SYS에 의해 차단 된 핵심 분리"를 충족한다고보고합니다. Php.cn 의이 게시물은 성가신 문제를 해결하는 데 도움이됩니다. 당신의 독서를 계속하십시오.

Ctrl alt del 화면에서 옵션을 제거하는 방법은 무엇입니까?Ctrl alt del 화면에서 옵션을 제거하는 방법은 무엇입니까?Apr 13, 2025 am 12:46 AM

컴퓨터에서 Ctrl Alt del을 누르면 잠금, 스위치 및 가입 옵션을 볼 수있는 보안 옵션 창이 입력됩니다. 이러한 옵션이 변경 될 수 있다는 것을 알고 있습니까? 이 php.cn 게시물은 opt를 제거하는 방법을 보여줍니다.

바이러스를 제거하는 방법 : Win32/Grenam.va! MSR? 여기에 가이드가 있습니다!바이러스를 제거하는 방법 : Win32/Grenam.va! MSR? 여기에 가이드가 있습니다!Apr 13, 2025 am 12:45 AM

일부 Windows 11/10 사용자는 Windows Defender가 Virus : Win32/Grenam.va! MSR이라는 바이러스를 발견했다고보고합니다. 그러나 그들은 그것을 제거하는 방법을 모릅니다. Php.cn 의이 게시물은 바이러스를 제거하는 방법을 알려줍니다 : Win32/Grenam.va! MSR.

웹 사이트를 데스크탑 앱으로 저장하는 방법은 무엇입니까?웹 사이트를 데스크탑 앱으로 저장하는 방법은 무엇입니까?Apr 13, 2025 am 12:44 AM

웹 사이트를 자주 방문 해야하는 경우 브라우저를 열고 매번 검색하는 것이 매우 번거 롭습니다. 웹 사이트를 앱으로 저장하려고하는 이유는 무엇입니까? 이렇게하면 일반 소프트웨어로 열 수 있습니다. 여기에서 Php.cn은 일부 usefu를 제공합니다

Windows 업데이트 수정에 대한 전체 안내서 0x00000000Windows 업데이트 수정에 대한 전체 안내서 0x00000000Apr 13, 2025 am 12:43 AM

일부 사람들은 최신 Windows 업데이트를 설치했을 때 Windows 11에서 오류 코드 0x00000000을 만났습니다. 이 예기치 않은 오류에 대처하려면 어떻게해야합니까? Php.cn 웹 사이트 의이 기사는 문제 해결에 대한 몇 가지 단서를 제공합니다.

이 앱에서 지원하지 않은 필터 타입을 수정하는 방법이 앱에서 지원하지 않은 필터 타입을 수정하는 방법Apr 13, 2025 am 12:41 AM

팀이나 Excel에서 파일을 열 때 "이 앱에서 지원되지 않은 Filetype이 선택한 Filetype"오류 메시지로 고통 받고 있습니까? 이제이 문제에 대한 유용한 솔루션을 얻으려면 PHP.CN 에서이 게시물을 읽으십시오.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전By尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기