날짜 매개변수에 \+ 또는 \-를 사용해야 하는 이유가 있나요?

날짜 매개변수에 \+ 또는 \-를 사용해야 하는 이유가 있나요?

나는 date \+%F\-%T날짜와 시간을 다음 형식으로 표시하는 데 사용합니다 2019-08-15-21:34:58.

에서 man date:

%F전체 날짜, %Y-%m-%d
%T시간과 동일, %H:%M:%S와 동일

나는 이해하지 못 \+하거나 설명이 없습니다 \-.

나중에 백슬래시가 이스케이프되고 더하기 기호는 매개변수 접두사이며 하이픈은 문자열과 같은 구분 기호(날짜-시간),
일부 사람들은 더 간단한 것을 사용 +'%F-%T'하거나 +"%F-%T"대신 사용합니다.

날짜 매개변수에 + 또는 -를 사용하는 이유가 있나요?

답변1

백슬래시는 아무 작업도 수행하지 않습니다.

-문자는 +쉘 구문에 특별한 내용이 없기 때문에 이스케이프할 필요가 없습니다.

$ set -o xtrace
$ date +%F-%T
+ date +%F-%T
2019-08-15-11:51:46
$ date \+%F\-%T
+ date +%F-%T
2019-08-15-11:51:50

위의 추적 출력에서 ​​볼 수 있듯이 셸에서 실행되는 명령은 백슬래시와 관계없이 동일합니다. 또한 추적 출력은 셸의 "디버그 출력"일 뿐이며 출력되는 모든 명령입니다.일반적으로 말하면케이스에 맞지 않음입력하다.

형식 사양이 도입되었습니다 +. date이는 -형식 지정 사양의 일부인 문자 그대로의 대시입니다(출력에서도 대시로 표시됩니다).

명령은 date \+%F\-%T와 동일합니다 date +%F-%T. 또한 일반적으로 에 표시된 것처럼 인용된 날짜 형식을 볼 수 있습니다 date +'%F-%T'. 형식은 단일 단어이므로 여기서는 차이가 없지만 date +'%F %T'쉘이 공백의 형식을 두 개의 별도 인수로 분할하는 것을 방지하기 위해 인용해야 합니다 date.

무엇하다다른 점은 %캐릭터다. crontab 사양에서 사용하는 경우 이스케이프를 원할 수 있습니다. 예를 들어 참조하십시오.cron 탭 작업에서 "날짜"를 실행하는 방법은 무엇입니까?

%문자는 3.0 이전 셸 구문 fish(작업 확장용)에서는 특별했지만 단어의 첫 번째 문자로만 사용되었습니다(따라서 a 다음은 아님 +). 마찬가지로 에서 zsh선행 문자는 그 뒤의 문자가 전역 연산자로 간주되지 않는다는 %점에서 특별하지만 ( 인용 부호를 사용하지 않고도 유사한 작업을 허용하기 위해 ) 여기에서는 동일하게 적용되지 않습니다.?kill %?cmd?

관련 정보