Bash에서 문자열 변수를 연결하는 방법
질문
PHP에서는 문자열이 다음과 같이 연결됩니다.
$foo = "Hello";
$foo .= " World";
여기에서 $ Foo는 "Hello World"가됩니다.
이것은 어떻게 bash에서 성취 되었습니까?
답변
foo="Hello"
foo="${foo} World"
echo "${foo}"
> Hello World
일반적으로 두 변수를 연결하기 위해서는 다른 것으로 쓸 수 있습니다.
a='Hello'
b='World'
c="${a} ${b}"
echo "${c}"
> Hello World
답변
Bash는 또한이 코드와 같이 + = 연산자를 지원합니다.
A="X Y"
A+=" Z"
echo "$A"
산출
x Y Z.
답변
먼저 bash
이 질문은 바쉬를 위해 특별히 서 있기 때문에 대답의 첫 번째 부분은 이렇게 할 수있는 여러 가지 방법을 제시합니다.
+ = : 변수에 추가합니다
구문 + =는 다른 방식으로 사용될 수 있습니다.
String var + = ...에 추가하십시오.
(나는 난황이기 때문에, 나는 두 개의 변수를 사용하고 A를 다시 사용하고 전체 답변에서 동일하게 재사용 할 것이다. ;-)
a=2
a+=4
echo $a
24
스택 오버플로 질문 구문을 사용하여,
foo="Hello"
foo+=" World"
echo $foo
Hello World
잘 작동!
정수에 추가 ((var + = ...))
변수 A는 문자열이지만 정수입니다.
echo $a
24
((a+=12))
echo $a
36
배열 var + = (...)에 추가
우리의 A는 또한 단 하나의 요소의 배열입니다.
echo ${a[@]}
36
a+=(18)
echo ${a[@]}
36 18
echo ${a[0]}
36
echo ${a[1]}
18
괄호 사이에는 공백 분리 배열이 있습니다.배열에 공백이 포함 된 문자열을 저장하려면 다음을 묶어야합니다.
a+=(one word "hello world!" )
bash: !": event not found
흠 .. 이것은 버그가 아니라 기능이 있습니다 ... bash가 개발하려고하지 못하게합니다! ", 당신은 다음을 할 수 있습니다.
a+=(one word "hello world"! 'hello world!' $'hello world\041')
declare -p a
declare -a a='([0]="36" [1]="18" [2]="one" [3]="word" [4]="hello world!" [5]="h
ello world!" [6]="hello world!")'
printf : builtin 명령을 사용하여 변수 재구성
printf 내장 명령은 문자열 형식을 강력한 방법으로 제공합니다.Bash Builtin이므로 STDOUT에서 인쇄하는 대신 변수에 포맷 된 문자열을 전송하는 옵션이 있습니다.
echo ${a[@]}
36 18 one word hello world! hello world! hello world!
이 배열에는 7 개의 문자열이 있습니다.그래서 우리는 정확한 7 개의 위치 인수를 포함하는 형식이있는 문자열을 만들 수 있습니다.
printf -v a "%s./.%s...'%s' '%s', '%s'=='%s'=='%s'" "${a[@]}"
echo $a
36./.18...'one' 'word', 'hello world!'=='hello world!'=='hello world!'
또는 우리는 제출 된 많은 논증으로 반복 될 한 인수 형식 문자열을 사용할 수 있습니다 ...
우리의 a는 여전히 배열입니다!첫 번째 요소 만 변경됩니다!
declare -p a
declare -a a='([0]="36./.18...'\''one'\'' '\''word'\'', '\''hello world!'\''=='\
''hello world!'\''=='\''hello world!'\''" [1]="18" [2]="one" [3]="word" [4]="hel
lo world!" [5]="hello world!" [6]="hello world!")'
Bash에서 색인을 지정하지 않고 변수 이름에 액세스하면 항상 첫 번째 요소를 해결합니다!
따라서 7 개의 필드 어레이를 검색하려면 1 번째 요소 만 다시 설정해야합니다.
a=36
declare -p a
declare -a a='([0]="36" [1]="18" [2]="one" [3]="word" [4]="hello world!" [5]="he
llo world!" [6]="hello world!")'
많은 인수가있는 하나의 인수 형식 문자열 :
printf -v a[0] '<%s>\n' "${a[@]}"
echo "$a"
<36>
<18>
<one>
<word>
<hello world!>
<hello world!>
<hello world!>
스택 오버플로 질문 구문 사용 :
foo="Hello"
printf -v foo "%s World" $foo
echo $foo
Hello World
nota : 더블 따옴표의 사용은 공백, 표 및 / 또는 뉴 라인을 포함하는 문자열을 조작하는 데 유용 할 수 있습니다.
printf -v foo "%s World" "$foo"
쉘 이제
POSIX 셸에서 Bashisms를 사용할 수 없으므로 Builtin Printf가 없습니다.
원래
그러나 단순히 할 수 있습니다 :
foo="Hello"
foo="$foo World"
echo $foo
Hello World
포맷 된 포맷 인쇄물을 사용하여
더 정교한 구조물을 사용하려면 포크 (작업을 만드는 새 하위 프로세스를 통해 결과를 반환하십시오)를 사용해야합니다.
foo="Hello"
foo=$(printf "%s World" "$foo")
echo $foo
Hello World
역사적으로 포크의 결과를 검색하기 위해 Backticks를 사용할 수 있습니다.
foo="Hello"
foo=`printf "%s World" "$foo"`
echo $foo
Hello World
그러나 이것은 중첩이 쉽지 않습니다.
foo="Today is: "
foo=$(printf "%s %s" "$foo" "$(date)")
echo $foo
Today is: Sun Aug 4 11:58:23 CEST 2013
뒷면에서는 백 슬래시로 내부 포크를 탈출해야합니다.
foo="Today is: "
foo=`printf "%s %s" "$foo" "\`date\`"`
echo $foo
Today is: Sun Aug 4 11:59:10 CEST 2013
답변
당신도 이것을 할 수 있습니다 :
$ var="myscript"
$ echo $var
myscript
$ var=${var}.sh
$ echo $var
myscript.sh
답변
bla=hello
laber=kthx
echo "${bla}ohai${laber}bye"
출력 할 것입니다
helloohaikthxbye
이것은 언제 유용합니다 $ blaohai. 변수를 찾을 수 없습니다. 오류가 없습니다.또는 문자열에 공백이나 다른 특수 문자가있는 경우."$ {foo}"이 적절하게 들어가는 모든 것을 탈출합니다.
답변
foo="Hello "
foo="$foo World"
출처:https://stackoverflow.com/questions/4181703/how-to-concatenate-string-variables-in-bash
최근댓글