왜 그렇습니다! 쉘 스크립트에 사용되는 문자

왜 그렇습니다! 쉘 스크립트에 사용되는 문자

!나는 최근에 쉘 스크립트에서 문자열 배열을 레코드 구분 기호로 사용 하려고 하는 상황에 직면했습니다 . 쉘 스크립트에서 이것을 사용하면 스크립트가 자동으로 확장됩니다. 이 상황을 재현하는 예는 다음과 같습니다.

check_variable="Hello"
echo "$check_variable"
Output: Hello
###For multiple strings, I tried to concatenate with ! as a record separator. 
echo "$check_variable !"
Output: echo "$check " > Results.txt

!약간의 조사 끝에 나는 이것이 실제로 특수 문자이므로 레코드 구분 기호로 사용해서는 안 된다는 것을 알게 되었습니다 . 그렇다면 왜 !사용합니까? 이 !역할을 끄고 쉘 스크립트에서 사용할 수 있는 방법이 있습니까 ?

답변1

!실제로 from을 사용하는 이유에 대한 좋은 설명이 있습니다.여기. 명령을 보다 명확하게 이해하기 위해 다음 명령을 실행했습니다.

pwd- It gives the present working directory.
!pwd - It executes the previously executed pwd command.

!rm이 설정은 사용자가 잘못 수행하여 전례 없는 결과를 초래할 수 있으므로 위험할 수 있습니다 .

페르소나의 효과를 테스트하는 또 다른 방법은 !다음과 같습니다.

echo "12345647" >> ramesh.txt
cat ramesh.txt
12345647
!echo
cat ramesh.txt
12345647
12345647

!echo다음 줄이 추가되어 명령이 실제로 실행되는 것을 볼 수 있습니다.1234567파일로.

특수 문자를 스크립트의 파일 구분 기호나 레코드 구분 기호로 사용하는 것은 권장되지 않지만 다음 명령을 실행하면 이 설정을 재정의할 수 있습니다.

set -H turns it on; 
set +H turns it off.

답변2

직접적인 관련은 없지만 "" 안에 내용을 넣으면 말하는 내용이 삽입된다는 점을 명심하세요. 첫 번째 줄에:

check_variable="Hello"

문자열에는 해석이 필요한 내용이 없는데 왜 해석해야 합니까? 이것은 echo를 통해 $check_variable을 사용할 때도 작동합니다.

check_variable='Hello'
echo $check_variable

이렇게 하면 Hello가 예상대로 인쇄됩니다.

만약 너라면~ 해야 하다예약된 문자를 구분 기호로 사용하고 에코를 통해 사용할 때는 따옴표로 묶지 마세요.

$ echo $check_variable ! > Results.txt
$ cat Results.txt
Hello !
$ echo '$check_variable !'
$check_variable !

이 경우 echo는 수신한 모든 인수를 인쇄할 뿐이며(에코 행의 !는 두 번째 인수로 처리됨) 모든 명령이 비슷한 작업을 수행하는 것은 아닙니다. 이 경우 A) 다른 명령에 대한 인수이고 B) ""로 묶어서 삽입하려고 하지 않기 때문에 Bash는 이를 특별하게 취급하지 않습니다. 마지막 에코는 ''를 사용하면 그 안의 모든 것을 보간 없이 문자 그대로 처리한다는 것을 보여주는 것입니다.

하지만 다른 문자에 대해서도 반복할 것이며, 가능하다면 의도된 용도 이외의 용도로 특수/예약 문자를 사용하지 말아야 한다고 말합니다.

관련 정보