단일 변수에 입력해야 하는 두 가지 유형 범위가 있습니다. 어떻게 해야 하나요?
예를 들어, bs0401부터 bs0405(bs0401,bs0402,bs0403...)까지의 범위와 bn0201부터 bn0205(bn0201,bn0202,bn0203..)까지의 다른 범위가 있는데 하나의 변수 Extension에서 두 작업을 모두 수행해야 합니다.
단일 시퀀스로 이와 같은 작업을 수행할 수 있습니다.
h=$(seq -f "bs%02g" 0401 1 0405)
그러나 echo $h가 다음과 같은 결과를 제공하도록 단일 변수에 할당된 여러 시퀀스를 포함하는 방법을 잘 모르겠습니다.
bs0401
bs0402
bs0403
bs0404
bs0405
bn0201
bn0202
bn0203
bn0204
bn0205
답변1
명령 대체( )에 $(...)
여러 명령을 포함 할 수 있습니다. 그래서 당신의 경우에는
h=$(seq -f 'bs%04g' 0401 1 0405; seq -f 'bn%04g' 0201 1 0205)
당신을 위한
$ echo $h
bs0401 bs0402 bs0403 bs0404 bs0405 bn0201 bn0202 bn0203 bn0204 bn0205
답변2
하나의 변수에 여러 값을 저장하려면 배열을 지원하는 쉘이 필요합니다(예 csh
: ksh
, rc
, zsh
, bash
, fish
, ) yash
.
에서는 zsh
다음 을 사용하여 명령에 의존하지 않고 이 작업을 수행 bash
할 수 있습니다.yash -o braceexpand
seq
list=(bs{0401..0405} bn{0201..0205})
또는 ksh93
:
list=(bs{401..405%04d} bn{201..205%04d})
이 특별한 경우에는 다음과 같이 단축할 수 있습니다.
list=({bs04,bn02}0{1..5})
이것은 4개의 쉘 모두에 적용됩니다.
그리고:
string=$(seq -f bs%04g 401 405)
실제로 다음 위치에 저장하고 있습니다.$string
하나seq
value는 후행 줄 바꿈이 제거된 명령의 출력입니다.
다음을 사용하여 두 명령의 연결된 출력을 저장할 수 있습니다 seq
.
string=$(seq -f bs%04g 401 405; seq -f bn%04g 201 205)
또는:
string="$(seq -f bs%04g 401 405)
$(seq -f bn%04g 201 205)"
이는 첫 번째 명령 대체에 의해 제거된 개행을 보상하기 위해 그들 사이에 다시 개행을 추가합니다.