중괄호 확장을 사용하여 확장된 배열을 변수에 저장

중괄호 확장을 사용하여 확장된 배열을 변수에 저장

node1 node2 node3다른 스크립트에 대한 입력으로 사용할 수 있도록 변수에 저장하고 싶습니다 .

그러나 나는 다음과 같이 bash가 제공하는 중괄호 확장을 사용하여 이 작업을 수행하고 싶습니다.node{1..3}

변수를 사용해 보았지만 nodes=node{1..3}이를 스크립트에 대한 인수( )로 사용하면 $nodes문자 그대로 선택되어 확장되지 않습니다.

답변1

배열에 할당하려면 요소를 괄호 안에 넣으세요.

nodes=(node{1..3})

배열을 사용할 때 배열로 확장하고 싶다고 bash에 명시적으로 알려야 합니다.

mycommand "${nodes[@]}"

ksh 및 bash의 배열 설계 특성으로 인해 은 $node배열의 첫 번째 요소이며 index 가 있는 모든 요소를 ​​명시적으로 요청해야 합니다 [@]. 언제나 그렇듯, 당신이 필요로 하는 것은큰따옴표를 사용한 변수 확장;를 사용하면 [@]각 요소가 별도의 단어에 배치됩니다.

보다배쉬 매뉴얼더 많은 정보를 알고 싶습니다.

node=node{1..3}중괄호 확장은 여러 단어가 허용되는 컨텍스트에서만 발생하기 때문에 작동하지 않습니다. 스칼라(문자열) 변수에 대한 할당은 단일 단어만 허용합니다. 또한 Bash는 변수 확장 전에 중괄호 확장을 수행하기 때문에 변수를 확장할 때 단일 단어만 얻습니다.

답변2

전문 사용자가 고려해야 할 사항:

$ mapfile -t arr < <(printf "%s\n" node{1..3})
$ printf "%s\n" "${arr[@]}"
node1
node2
node3

원천

답변3

이 질문을 읽은 후 답을 찾았습니다.$array가 ksh 및 bash에서 전체 배열을 확장하지 않는 이유는 무엇입니까?

nodes=$(echo nodes{1..3})

관련 정보