if 구조가 작동하지 않는 이유는 무엇입니까?

if 구조가 작동하지 않는 이유는 무엇입니까?

.java가 아직 문자열에 없으면 문자열에 추가하고 싶습니다. 구조체를 사용하여 이 작업을 어떻게 수행할 수 있나요 if? 내가 시도한 것은 다음과 같습니다.

  6 echo geef eens je naam van je java programma?
  7 
  8 read naam
  9 firstletter=${naam:0:1}
 10 
 11 naamm="${naam^}"
 12 echo $naamm
 13 
 14 add=".java"
 15 
 16 if [ ${naamm:(-5)} != ".java" ]
 17 then
 18         naamm=$naamm$add
 19         echo $naamm
 20 else
 21         #nothing
 22 fi

답변1

여러 가지 가능성:

if ! [[ $naamm =~ \.java$ ]]

또는

name="${name%.java}.java"

또는

if [ "${name: -5}" = '.java' ]

추가 질문

내용은 다음과 같이 파일에 기록될 수 있습니다.

echo "public class $naamm {
public main..." >file

더 큰 콘텐츠의 경우 이 접근 방식이 더 쉽습니다.

cat <<\EOT >file
public class $naamm {
    public main...
EOT

답변2

이를 사용하여 grep문자열에 패턴이 있는지 테스트한 다음 패턴을 추가하거나 전달할 수 있습니다.

#!/bin/bash
vars=(String.obj String.java)

for v in "${vars[@]}"; do
    if ! echo "${v}" | grep -q "\.java$"; then
        appended="${v}.java"
        echo "${appended}"
    fi
done

관련 정보