변수가 있다고 가정해 보겠습니다 foo
.
foo=`echo ab cd ef gh`
당신이 할 경우 echo foo
, 당신은 얻을 것입니다:
$ echo $foo
ab cd ef gh
이제 가장 빠른 방법부터 ef
시작 하겠습니다 .$foo
답변1
변수에 변수가 적어도 한 번 포함되어 있다고 가정하면 ef
POSIXly:
$ printf '%s\n' "${foo%ef*}${foo##*ef}"
ab cd gh
bash
, ksh
변형(포함되지 않음 posh
) zsh
및 에서는 yash
다음을 사용할 수 있습니다.
$ printf '%s\n' "${foo/ef}"
첫 번째 항목을 삭제 ef
하거나 "${foo//ef}"
모든 항목을 삭제합니다.
답변2
쉘을 사용할 수 있습니다패턴 교체패턴 삭제:
$ foo="ab cd ef gh"
$ echo "${foo//ef}"
ab cd gh
노트
많은 사람들은 백틱을 사용하는 것이 구식이라고 생각합니다. 일반적인 현대적 형태의 명령 대체는 입니다
$(...)
.백틱과 에코를 사용하여 생성하는
foo
것은 중복됩니다. 위와 같이 간단히 문자열을 변수에 할당할 수 있습니다.무슨 일이 일어나고 있는지에 대한 아이디어를 제공하기 위해 인수를 따옴표로 묶지 않고 echo를 사용하면 쉘이 실행됩니다.분사, 문자열을 세 부분으로 분할하여
echo
세 개의 개별 인수로 제공합니다.echo
해당 매개변수를 공백으로 연결하십시오.
답변3
여기에는 두 가지 방법이 있습니다.
uc@SVE1411EGXB:~/shop_app/depot2$ foo=`echo ab cd ef gh`
uc@SVE1411EGXB:~/shop_app/depot2$ echo ${foo/ef}
ab cd gh
또는 스트림 편집기 AKA ..를 사용하여 null로 sed
검색 하고 바꿉니다."ef"
uc@SVE1411EGXB:~/shop_app/depot2$ echo $foo | sed 's/ef//g'
ab cd gh