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})