php教程 PHP开发 쉘 프로그래밍: Bash Space Things

쉘 프로그래밍: Bash Space Things

Nov 23, 2016 pm 12:57 PM
shell

먼저 Bash에서 공백을 사용해야 하는 경우와 사용하지 않는 경우를 이해하세요.

1. 등호 할당에는 양쪽에 공백이 있으면 안 됩니다.

2. 명령과 옵션 사이에는 공백이 필요합니다.

3. 선택사항

자주 발생하는 문제 살펴보기

1. 할당할 때 등호 양쪽에 공백이 있거나 왼쪽에만 공백이 있습니다
test@pythontab. com ~ $ var1 = 테스트
bash: var1: 명령을 찾을 수 없음
test@pythontab.com ~ $ echo ${var1:?error}
bash: var1: 오류
test@pythontab.com ~ $ echo ${var1?error}
bash: var1: 오류
test@pythontab.com ~ $ var2 =test
bash: var2: 명령을 찾을 수 없음
test@pythontab.com ~ $ echo ${var2:?error}
bash: var2: error
test@pythontab.com ~ $ echo ${var2?error}
bash: var2: error

여기서 사용했습니다 bash 변수 확장, ${var1:?error} var1이 설정되지 않거나 null(정의되지 않거나 비어 있음)인 경우 지정된 오류가 보고됩니다. ${var1?error}var1이 설정되지 않은 경우 지정된 오류가 보고됩니다. 실행 결과로 볼 때 등호 왼쪽에 공백이 있으면 변수 이름이 명령으로 실행되어 결과는 명령을 찾을 수 없으며 변수에 값이 할당되지 않았습니다

2. 값을 지정할 때 등호 왼쪽에는 공백이 없고 오른쪽에는 공백이 있습니다. (이 상황은 조금 특별합니다. 두 가지 상황이 있습니다.)
test@pythontab .com ~ $ var= test
test@pythontab.com ~ $ var= nocmd
bash: nocmd: command notfound

등호 오른쪽에도 공백이 있습니다. 첫 번째 명령은 오류를 보고하지 않지만 두 번째 명령은 오류를 보고합니다.

쉘에서 명령을 실행하는 방법이 있기 때문입니다: var=string command

명령 명령은 변수 var의 값을 가져옵니다( var 변수는 명령이 실행된 후 유지됩니다. bash4에서는 유지되지 않지만 대시에서 찾았을 때 유지되었습니다. 테스트는 명령이고 nocmd는 그렇지 않기 때문에 보고했습니다. 명령을 찾을 수 없습니다.
test@ pythontab.com ~ $ var=newtest eval echo $var
newtest
test@pythontab.com ~ $ echo $var

참고: 여기서는 eval을 사용했습니다. 첫 번째 오류를 방지하기 위해 구문 분석 시 $var가 빈 문자열로 대체됩니다. 그렇지 않으면 다음과 같은 상황이 발생합니다(다음은 잘못된 테스트 방법입니다. echo가 실행되기 전에 $var가 빈 문자열로 대체되었습니다)

코드는 다음과 같습니다.
test@pythontab.com ~ $ var=newtest echo $var
test@pythontab.com ~ $ echo $var

이쯤 되면 다들 이해하셨으리라 믿습니다. 등호의 경우 값을 지정할 때 왼쪽과 오른쪽에 공백이 있으면 안 됩니다. 오른쪽에 공백이 있으면 반드시 오류가 발생하는 것은 아니지만 원하는 결과는 아닙니다.

3. 명령어와 옵션 사이에 공백이 있어야 합니다

다들 이해하시는 것 같은데 왜 아직도 장황할까요? 얘기가 나와서 말인데, 매우 특별한 명령을 언급해야 합니다: [ 명령(맞게 읽으셨군요. [ )입니다. 이것은 테스트 명령입니다(물론 bash에서 이것은 내장 명령이지만 영향을 미치지 않습니다).

우리의 이해). 아마 여러분은 [명령이 친숙해 보인다고 생각할 것입니다. 예, 여러분도 본 적이 있을 것입니다. 다음 예제를 살펴보세요
test@pythontab.com ~ $ if [ "abc" = "abc" ]; '그들은 동일합니다'; fi
그들은 동일합니다
test@pythontab.com ~ $ type -a [
[는 쉘 내장입니다
[는 /usr/bin/[

기억하시나요? [명령어는 if 판단에 자주 사용됩니다. 물론 어떤 사람들은
test@pythontab.com ~ $ [ "abc" = "cba" ] || echo 'they are not the same'
그들은 동일하지 않습니다
test@pythontab.com ~ $ type -a [
[ 내장 쉘입니다
[ is /usr/bin/[

[ 이 명령은 호출됩니다. 테스트 명령, 둘 다 거의 동일합니다. 정확히 동일하지 않은 이유는 무엇입니까? 이것을 살펴보겠습니다
test@pythontab.com ~ $ [ "abc" = "cba"
bash: [: 누락 `]'
test@pythontab.com ~ $ [ "abc" = "cba " ]
test@pythontab.com ~ $ test "abc" = "cba" ]
bash: 테스트: 인수가 너무 많습니다
test@pythontab.com ~ $ test "abc" = "cba "

분명히 말씀드리자면 [명령어를 사용할 때는 tail을 주어야 합니다.], test 명령을 사용할 때는 tail을 추가할 수 없습니다. Tail]은 [마지막 매개변수,

명령의 끝을 나타내는 필수 매개변수입니다. 모두가 이해할 수 있도록 먼저 다음과 같이 말씀드리겠습니다. [이것은 쉘에 있는 명령이고 주위에 공백이 있어야 합니다! ]는 [의 마지막 필수 매개변수이며 양쪽에 공백이 필요합니다(ps와 같은 일부 명령의 매개변수는 함께 연결할 수 있지만 [ 명령은 연결할 수 없으므로 매개변수 사이에 공백이 있어야 합니다). [일반적인 실수

를 살펴보겠습니다. a. if와 [
test@pythontab.com ~ $ if[ "$HOME" = "/home/igi"];then echo ' 사이에 공백이 없습니다. 동등'; fi
bash: 예상치 못한 토큰 `then'
test@pythontab.com 근처에 구문 오류가 있습니다. ~ $ if[ "$HOME" = "/home/igi" ];then echo 'equal'; 🎜>bash: 예상치 못한 토큰 `then'
test@pythontab.com 근처에 구문 오류가 있습니다. ~ $ if["$HOME" = "/home/igi"];then echo 'equal'; bash: 구문 예상치 못한 토큰 `then'
test@pythontab.com ~ $ if["$HOME" = "/home/igi" ];then echo 'equal'; bash: 예상치 못한 토큰 근처에서 구문 오류 ` 그럼'

분명히 구문 분석 오류입니다. if[ bash의 경우 도대체 무엇인지 모르겠습니다

b. [와 다음 매개변수
test@pythontab.com ~ $ 사이에 공백이 부족합니다. if [" $HOME" = "/home/igi" ];then echo 'equal'; fi
bash: [/home/igi: 해당 파일이나 디렉터리가 없습니다
test@pythontab.com ~ $ if [ "$HOME " = "/home/igi"];then echo 'equal'; fi
bash: [/home/igi: 해당 파일이나 디렉터리가 없습니다

["$HOME" bash의 경우, 그리고 도대체 무슨 일이 일어나고 있는지 모르겠습니다

c. [ ]
test@pythontab.com ~ $ if [ "abc"="abc" 사이의 매개변수 사이에 공백이 부족합니다. ]; then echo 'equal' ; fi
equal
test@pythontab.com ~ $ if [ "abc"="cba" ] then echo 'equal'; >첫 번째 명령어는 맞는 것 같네요(사실 그냥 우연일 뿐입니다), 두 번째 명령어를 보면 "abc"와 "cba"는 분명히 다르지만 같은 것으로 판단됩니다. 이는 매개변수 사이의 공백이 부족하고, [명령어는 내부 값을 단순한 값으로 간주하기 때문입니다. 다음 명령을 살펴보면 안심할 수 있습니다
test@pythontab.com ~ $ if [ 0 ] then echo 'equal'; fi
equal
test@pythontab.com ~ $ if [ "1 " ]; echo 'equal'; fi
equal
test@pythontab.com ~ $ if [ "" ]; then echo 'equal'; test@pythontab.com ~ $ if [ ] ; then echo 'equal'; fi

[ ]에 값이 하나만 있는 경우(공백이 부족하여 함께 연결된 것도 포함) 빈 문자열이 아닌 경우 true입니다. . 따라서 [ ] 사이의 매개변수도 양쪽에 공백이 있어야 하며, 겹쳐서 사용할 수 없습니다

d. 매개변수와 꼬리 사이에 공백이 부족합니다.]

장황하지 않습니다. , tail] [명령어의 매개변수이기도 합니다. 위에서 언급했듯이

매개변수 사이에는 공백이 있어야 합니다. . 물론입니다. 행운을 빕니다.
test@pythontab.com ~ $ var=' abc'
test@pythontab.com ~ $ if [$var = "abc" ] ;then echo 'equal'; fi
equal
test@pythontab.com ~ $ if ["$var" = "abc" ];then echo 'equal'; bash: [ abc: 명령 찾을 수 없음

double 따옴표로 묶인 것은 전체를 의미하며, 큰 따옴표가 없는 경우 문자열 전후의 공백이나 탭은 잘립니다. 우연히 마주치거나 의도적으로 문자열 앞뒤에 공백이나 탭을 삭제하려는 경우 불가능하지는 않지만 이를 작성하는 것은 매우 권장되지 않습니다. 코드가 매우 취약해질 수 있습니다.

또는 추가해야 할 공백을 모두 추가했지만 여전히 오류가 발생하는 경우도 큰따옴표가 부족하기 때문일 수 있습니다. 이러한 상황은 매우 일반적입니다. 마지막으로
test@pythontab.com ~ $ var=''
test@pythontab.com ~ $ if [ "$var" = "abc" ];then echo를 살펴보세요. 'equal'; fi
test@pythontab.com ~ $ if [ $var = "abc" ];then echo 'equal';
bash: [: =: 단항 연산자 필요
test@pythontab .com ~ $ dvar='a b c'
test@pythontab.com ~ $ if [ $dvar = "a b c" ];then echo 'equal'; fi
bash: [: 인수가 너무 많습니다
test@ pythontab.com ~ $ if [ "$dvar" = "a b c" ];then echo 'equal'; fi
equal

자세히 설명하겠습니다. 큰따옴표를 생략하지 마세요. 쉽게. 분명합니까? 그래도 이해가 안 되시면

마지막으로 파이프 양쪽의 선택 공백에 대해 헛소리는 하지 않겠습니다. 이에 대해 의심하는 사람을 본 적이 없기 때문입니다.

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 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 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Windows 11에 클래식 쉘을 설치하는 방법은 무엇입니까? Windows 11에 클래식 쉘을 설치하는 방법은 무엇입니까? Apr 21, 2023 pm 09:13 PM

&lt;p&gt;운영 체제를 사용자 정의하는 것은 일상 생활을 더욱 즐겁게 만드는 좋은 방법입니다. 사용자 인터페이스 변경, 사용자 정의 테마 적용, 위젯 추가 등을 수행할 수 있습니다. 오늘은 Windows 11에 ClassicShell을 설치하는 방법을 알려드리겠습니다. </p><p>이 프로그램은 오랫동안 사용되어 왔으며 운영 체제를 수정할 수 있습니다. 2017년에 해체된 조직은 이제 자원봉사자들이 운영하기 시작했습니다. 새 프로젝트는 OpenShell이라고 하며 현재 관심 있는 사람들을 위해 Github에서 사용할 수 있습니다. &lt;/p&gt;&a

HRESULT 0x80073D02 문제가 해결되면서 PowerShell 배포가 실패함 HRESULT 0x80073D02 문제가 해결되면서 PowerShell 배포가 실패함 May 10, 2023 am 11:02 AM

스크립트를 실행할 때 PowerShell에서 "Add-AppxPackage: 배포에 실패했습니다. HRESULT: 0x80073D02, 패키지가 수정하는 리소스가 현재 사용 중이므로 패키지를 설치할 수 없습니다. 오류 0x80073D02..."라는 오류 메시지가 표시됩니까? 오류 메시지에 나와 있듯이 이는 이전 프로세스가 실행되는 동안 사용자가 하나 또는 모든 WindowsShellExperienceHost 응용 프로그램을 다시 등록하려고 할 때 발생합니다. 이 문제를 신속하게 해결할 수 있는 몇 가지 간단한 솔루션이 있습니다. 수정 1 – 경험 호스트 프로세스 종료 powershell 명령을 실행하기 전에 종료해야 합니다

Open Shell Windows 11이 작동하지 않는 문제에 대한 수정 사항은 다음과 같습니다. Open Shell Windows 11이 작동하지 않는 문제에 대한 수정 사항은 다음과 같습니다. Apr 14, 2023 pm 02:07 PM

Windows 11에서 실행되지 않는 오픈 셸은 새로운 문제가 아니며 이 새로운 운영 체제가 등장한 이후로 사용자를 괴롭혀 왔습니다. Open-Shell Windows 11이 작동하지 않는 문제의 원인은 구체적이지 않습니다. 이는 프로그램의 예상치 못한 오류, 바이러스나 맬웨어의 존재 또는 손상된 시스템 파일로 인해 발생할 수 있습니다. 모르시는 분들을 위해 말씀드리자면 Open-Shell은 2017년에 단종된 Classic Shell을 대체하는 것입니다. Windows 11에 Classic Shell을 설치하는 방법에 대한 튜토리얼을 확인하실 수 있습니다. Windows 11 시작 메뉴를 교체하는 방법

Explorer.exe가 시스템 시작 시 시작되지 않음 [수정] Explorer.exe가 시스템 시작 시 시작되지 않음 [수정] Jun 03, 2023 am 08:31 AM

요즘 많은 Windows 사용자는 심각한 Windows 시스템 문제에 직면하기 시작합니다. 문제는 시스템이 로드된 후 Explorer.exe를 시작할 수 없고 사용자가 파일이나 폴더를 열 수 없다는 것입니다. 그러나 Windows 사용자는 경우에 따라 명령 프롬프트를 사용하여 Windows 탐색기를 수동으로 열 수 있으며 시스템을 다시 시작할 때마다 또는 시스템 시작 후에 그렇게 해야 합니다. 이는 문제가 될 수 있으며 아래에 언급된 다음 요인으로 인해 발생합니다. 시스템 파일이 손상되었습니다. 빠른 시작 설정을 활성화합니다. 오래되었거나 문제가 있는 디스플레이 드라이버. 시스템의 일부 서비스가 변경되었습니다. 수정된 레지스트리 파일. 위의 모든 요소를 ​​염두에 두고 사용자에게 확실히 도움이 될 몇 가지 요소를 생각해냈습니다.

Linux에서 파일 끝의 줄을 빠르게 삭제하는 방법 Linux에서 파일 끝의 줄을 빠르게 삭제하는 방법 Mar 01, 2024 pm 09:36 PM

Linux 시스템에서 파일을 처리할 때 파일 끝 부분의 줄을 삭제해야 하는 경우가 있습니다. 이 작업은 실제 응용 프로그램에서 매우 일반적이며 몇 가지 간단한 명령을 통해 수행할 수 있습니다. 이 기사에서는 Linux 시스템에서 파일 끝의 줄을 빠르게 삭제하는 단계를 소개하고 구체적인 코드 예제를 제공합니다. 1단계: 파일의 마지막 줄을 확인하세요. 삭제 작업을 수행하기 전에 먼저 파일의 마지막 줄이 무엇인지 확인해야 합니다. tail 명령을 사용하여 파일의 마지막 줄을 볼 수 있습니다. 특정 명령은 다음과 같습니다. tail-n1filena

Windows에서 쉘 스크립트 파일을 실행하는 다양한 방법 Windows에서 쉘 스크립트 파일을 실행하는 다양한 방법 Apr 13, 2023 am 11:58 AM

Linux용 Windows 하위 시스템 첫 번째 옵션은 Windows 시스템에서 기본적으로 Linux 바이너리 실행 파일을 실행하기 위한 호환성 계층인 Linux용 Windows 하위 시스템 또는 WSL을 사용하는 것입니다. 대부분의 시나리오에서 작동하며 Windows 11/10에서 셸 스크립트를 실행할 수 있습니다. WSL은 자동으로 사용할 수 없으므로 Windows 장치의 개발자 설정을 통해 활성화해야 합니다. 설정 > 업데이트 및 보안 > 개발자용으로 이동하여 이 작업을 수행할 수 있습니다. 개발자 모드로 전환하고 예를 선택하여 메시지를 확인합니다. 다음으로 W를 찾아보세요

슈퍼 하드코어! 11가지 매우 실용적인 Python 및 Shell 스크립트 예제! 슈퍼 하드코어! 11가지 매우 실용적인 Python 및 Shell 스크립트 예제! Apr 12, 2023 pm 01:52 PM

Python 스크립트의 몇 가지 예: 기업 WeChat 경보, FTP 클라이언트, SSH 클라이언트, Saltstack 클라이언트, vCenter 클라이언트, 도메인 이름 SSL 인증서 만료 시간 획득, 오늘의 일기 예보 및 미래의 날씨 추세 차트 보내기: SVN 전체 백업, Zabbix는 이전 기사에서 사용자 비밀번호 만료 모니터링, 로컬 YUM 구축 및 독자의 요구 사항(부하가 높을 때 상대적으로 높은 점유율을 차지하는 프로세스 스크립트를 찾아 알림을 저장하거나 푸시함)이 약간 길기 때문에 잠시만 기다려주세요. 기사 마지막에는 결국 부활절 달걀이 있습니다. 기업용 WeChat 알람의 Python 스크립트 부분 이 스크립트는 기업용 WeChat 애플리케이션을 사용하여 WeChat 알람을 수행하고 사용할 수 있습니다.

Windows 11에서 클래식 시작 메뉴를 복원하기 위해 Open Shell을 설치하는 방법 Windows 11에서 클래식 시작 메뉴를 복원하기 위해 Open Shell을 설치하는 방법 Apr 18, 2023 pm 10:10 PM

OpenShell은 Windows 11 시작 메뉴를 클래식 스타일 메뉴 또는 Windows 7 스타일 메뉴와 유사하게 사용자 정의하는 데 사용할 수 있는 무료 소프트웨어 유틸리티입니다. 이전 버전 Windows의 시작 메뉴는 사용자에게 시스템 내용을 쉽게 찾아볼 수 있는 방법을 제공했습니다. 기본적으로 OpenShell은 이전 Windows 버전에서 후자 버전의 기능을 얻는 데 도움이 되는 다양한 사용자 인터페이스 요소를 제공하는 ClassicShell을 대체합니다. ClassicShell의 개발이 2017년에 중단된 후 GitHub 자원 봉사자들에 의해 OpenShell이라는 이름으로 유지 관리 및 개발되었습니다. 윈과 관련이 있습니다

See all articles