녹음에 사용하는 다른 플래시 드라이브에 폴더를 만들고 미디어 장치의 레이블과 uuid를 이름으로 삽입하려고 합니다. 다음 코드가 있습니다.
LOGDEVICELABEL=FLASHDRIVENAME
MD=`lsblk -I 8 -o label,uuid -n|sed -e '/^$/ d' -e '/^$LOGDEVICELABEL.*$/ d'`
MDLOGDIR=/media/$LOGDEVICELABEL/Log/$MD
mkdir $MDLOGDIR
문제는 변수 값의 $MD
시작 부분에 공백이 있는데 이를 제거할 수 없다는 것입니다. 공백으로 인해 mkdir은 /media/$LOGDEVICELABEL/Log/
및 $MD
두 개의 별도 인수로 처리됩니다.
나는 시도했다:
MDLOGDIR=`sed 's/ // g' <<</media/$LOGDEVICELABEL/Log/$MD`
UUID와 Label(필수 사항) 사이의 공백만 제거하고 /media/$LOGDEVICELABEL/Log/
와 사이의 공백 은 제거하지 않습니다 $MD
.
답변1
내가 하고 싶은 한 가지는 echo
원하지 않는 공백을 제거하는 것입니다. 이 경우 따옴표를 생략하는 것이 중요합니다.
LOGDEVICELABEL=FLASHDRIVENAME
MD=$(lsblk -I 8 -o label,uuid -n|sed -e '/^$/ d' -e '/^$LOGDEVICELABEL.*$/ d')
MD=$(echo $MD) # <-- This line
MDLOGDIR=/media/$LOGDEVICELABEL/Log/$MD
mkdir $MDLOGDIR
쉘은 이 명령을 호출 하고 명령이 공백 문자로 구분하여 인쇄하는 echo
일련의 토큰을 제공합니다 . echo
그 효과는 (1) 선행 및 후행 공백을 건너뛰고 (2) 토큰 사이의 하나 이상의 공백 문자를 단일 공백으로 변환하는 것입니다.
이 경우 $(...)
백틱 버전 대신 동등한 백틱 버전을 사용합니다. 일반적으로 말해서 이 버전이 읽기 더 쉽다고 생각합니다. $(...$(...))
백틱 버전은 중첩될 수 없지만 ( ) 중첩될 수 있다는 장점도 있습니다 .
답변2
"매개변수 확장"과 같은 것을 사용하면 어떨까요?
MDLOGDIR=/media/$LOGDEVICELABEL/Log/${MD# }
MDLOGDIR=/media/$LOGDEVICELABEL/Log/${MD/ }
또는 sed
다음과 같은 것을 확장
s /^ //