변수의 일부를 잘라내려고 할 때 구문 오류가 발생했습니다.

변수의 일부를 잘라내려고 할 때 구문 오류가 발생했습니다.

간단한 것을 작성하면 echo $i문제가 없습니다. 변수가 표시됩니다. 하지만 내가 그걸로 뭔가를 하려고 하면

$($i|cut -d"." -f1-3)

그런 다음 오류 메시지가 나타납니다.

: -bash: /...file.backup: Permission denied (in root env)

누구든지 문제 해결 방법을 말해 줄 수 있습니까?

for i in $(find  /directory -type f -name '*.backup')
do 
  echo $i $($i|cut -d"." -f1-3)
done

답변1

$i의 이전 에코를 놓친 것 같습니다.

for i in $(find /directory -type f -name '*.backup')
do 
echo $i $(echo "$i"|cut -d"." -f1-3)
done`

답변2

basename아마도 and 또는 부분 문자열을 사용할 수 있을까요 ?

참조 man basenamehttp://tldp.org/LDP/abs/html/string-manipulation.html하위 문자열에 대한 세부정보입니다.

기본 이름을 사용하면 파일 이름의 첫 번째 부분을 얻을 수 있습니다. basename $i ".backup".backup은 파일 이름에서 제거됩니다.

${i::-7}은 변수에서 마지막 7자를 제거합니다.

답변3

2턴만에 해결. 최적은 아닐 수도 있지만 작동합니다. 다른 해결 방법을 아는 사람이 있으면 알려주시기 바랍니다.

for i in $(find  /directory -type f -name '*.backup')
do 
    for j in $(find  /directory -type f -name '*.backup'|cut -d"." -f1-3)
    do 
        echo $i $j 
    done 
done

관련 정보