나는 이러한 질문 중 일부와 답변 중 일부를 살펴봤지만 결과를 화면에 표시하는 방법만 알려주고 일반적으로 한 문자만 포함합니다. 문자를 제거 ',
하고 답을 유지 해야합니다~에변수
내 $var3은 다음과 같습니다. ( '/scripts/test1.sh', 'Alf Complete', '-', 'S1E1', '-', 'Episode 1', 'has', 'been', 'paused', 'hellfire', 'i', 'Engsub - Series', 'testing']
이것은 다른 프로그램의 출력입니다.)
이것은 명령으로 변환되어야 하며 "$var4"를 사용하여 시작되어야 합니다(그리고 다음과 같아야 합니다) /scripts/test1.sh Alf Complete - S1S1 - Episode 1
.
문제는 어떻게 원하지 않는 문자를 제거하고 새 변수(예: $var4)에 새 데이터를 유지할 수 있느냐는 것입니다.
나는 Linux와 스크립트 작성에 매우 익숙하지 않다고 덧붙일 수 있습니다. 그러니 나를 "멍청하다"고 생각하십시오...
1월 27일 수정
다음과 같이 스크립트를 시작합니다.
./test1.sh 'test1','test2','test3'
스크립트 뒤의 텍스트는 스크립트를 호출한 프로그램이 남긴 매개변수입니다.
이것은 내 현재 스크립트입니다.
#!/bin/sh
# populate var0
read -r var0<<-EOF
messer # is the program that is going to be called in the end of this script
EOF
# populate var1
read -r var1<<-EOF
--command='m "Adam Larsson" # this is the first arguments
EOF
# populate argumentsreal
read -r argumentsreal<<-EOF
$@ #this is the arguments that are posted by the application that calls this script
EOF
var4="'" # this adds the last closing ' to the code
# Join Forces
var3="$var0 $var1 $argumentsreal $var4"
echo $var3>txt.txt # dumping result (bugcheck)
$var3 # Executing command
이것은 지금까지의 내 코드입니다. 가장 큰 문제는 이를 실행할 때 프로그램이메서하지만 Invalid message - check your syntax
이렇게 하면 다음과 같은 cat txt.txt
결과를 얻습니다.
messer --command='m "Adam Larsson" 테스트 test1, test2, test3
이제 해당 텍스트 줄을 복사하여 명령줄에 붙여넣고 Enter 키를 누르면 완벽하게 작동합니다.
그렇다면 스크립트에서 실행할 때 왜 작동하지 않습니까?
답변1
tr -d \',
;like를 사용해 보세요 printf '%s\n' "$var3" |tr -d \',
. 이렇게 하면 변수에서 모든 쉼표와 작은따옴표가 제거됩니다 $var
.
답변2
bash
"매개변수 확장: 패턴 대체"를 시도해 보세요 .
$ echo "${var3//,}"
'/scripts/tautullimess.sh' 'Alf Complete' '-' 'S1E1' '-' 'Episode 1' 'has' 'been' 'paused' 'hellfire' 'i' 'Engsub - Series''testing']
$ echo "${var3//[\',]}"
/scripts/tautullimess.sh Alf Complete - S1E1 - Episode 1 has been paused hellfire i Engsub - Series testing]