문자열의 일부를 에코할 수 없습니다.
단순화된 버전은 다음과 같습니다.
t=no_1187985:/home/my.name/testing/no
no_1187985를 에코하고 싶습니다.
tt=$(echo $t | cut -d":" -f 1)
echo $tt
하지만 이것은 공백만 생성합니다(실제 스크립트에서는 명령 오류가 발견되지 않습니다).
-f 1을 -f 2로 변경하면 두 번째 필드에서는 작동하는데 왜 첫 번째 필드에서는 작동하지 않는지 이해할 수 없습니다.
이것은 컨텍스트에 대한 실제 코드의 일부입니다.
while read line;
do
#echo $line
#sleep 1
path=$(dirname "$line")
#echo $path
#mkdir -p $(echo $path | cut -d":" -f 2)
inode= $(echo $path | cut -d":" -f 1)
echo $inode
#mv ~/deleted/$inode $(echo $line | cut -d":" -f 2);
done < .temp
휴지통을 만들려는 시도입니다. temp는 "복원"할 다른 파일의 경로 이름을 포함하는 파일입니다. 각 행을 반복합니다. 파일을 디렉터리 트리로 다시 이동하기 전에 디렉터리 트리를 다시 만듭니다. 파일은 현재 삭제된 폴더에 저장되어 있으며 끝에 해당 inode 번호가 추가되어 있습니다. 파일이 "복원"(즉, 뒤로 이동)되면 파일 이름에서 inode가 제거됩니다.
.temp 파일에는 파일 이름(원래 파일 이름과 inode 조합)과 원래 경로 이름이 포함되며 둘 다 ":" 구분 기호로 구분됩니다.
답변1
=
변수 할당 기호 주위에는 공백이 없어야 합니다.
장면 1:
inode = something
- bash는inode
2개의 인수를 사용하여 명령을 실행하려고 시도합니다.- 이는 다음과 같이 말하는 것과 같습니다.
inode "=" "something"
시나리오 2:
inode =something
inode
- bash는 1개의 인수(string)로'=something'
명명된 명령을 실행하려고 시도합니다.- 이는 다음과 같이 말하는 것과 같습니다.
inode "=something"
장면 3:
inode= something
something
- bash는 환경이inode
빈 문자열로 설정된 상태에서 명령을 실행하려고 시도합니다.- 이는 다음과 같이 말하는 것과 같습니다.
inode="" something
노트: 확인 부분2.9.1 간단한 명령아래 제공된 참조에서.
인용하다:쉘 명령 언어