Bash 트릭을 사용하여 몇 문자 사이에서만 달라지는 중복 문자열 목록을 입력하려면 어떻게 해야 합니까?

Bash 트릭을 사용하여 몇 문자 사이에서만 달라지는 중복 문자열 목록을 입력하려면 어떻게 해야 합니까?

이 질문은 이전에 요청되었을 수도 있지만 어떻게 표현해야 할지 모르겠습니다. 기본적으로 string1, string2, string3 등 일련의 문자열을 입력하고 싶지만 추가 입력은 필요하지 않습니다. 그럼 들어갈 수 있는 방법이 있나요?

cat 'expr "/dev/input/event" "[1 2 3 4]" " "'*4

결정 :

cat /dev/input/event1 /dev/input/event2 /dev/input/event3 /dev/input/event4

그러면 각 장치를 개별적으로 입력할 필요가 없나요?

또한 expr 명령이 어떻게 작동하는지에 대한 명백한 오해에 대해 사과드립니다.

답변1

파일 이름(또는 장치 노드)을 확장하는 데 사용됩니다.이미 존재 함, 그 다음에파일 이름 와일드카드일반적으로 원하는 것:

첫 번째는 으로 확장되고 event1, event4두 번째는 존재하는 모든 것으로 확장됩니다 eventXX.

cat /dev/input/event[1-4]
cat /dev/input/event*

기존 파일에 신경 쓰지 않고 문자열만 원하는 경우버팀대 확장. 모두 event1를 생성하는 두 가지 방법 event4은 첫 번째는 목록만 사용하고 두 번째는 범위를 사용하는 것입니다.

cat /dev/input/event{1,2,3,4}
cat /dev/input/event{1..4}

(링크는배쉬 가이드, 그 자체로 유용한 리소스입니다. )

답변2

당신이 찾고있는 것은 버팀대 확장입니다.

3.5.1 지원 확장

다음을 수행할 수 있습니다.

cat /dev/input/event{1..4}

내 컴퓨터에 다음 파일을 만들었습니다.

$ touch input{1..4}
$ ls -l input{1..4}
-rw-r--r--  1 jessebutryn  staff  0 Dec 31 10:31 input1
-rw-r--r--  1 jessebutryn  staff  0 Dec 31 10:31 input2
-rw-r--r--  1 jessebutryn  staff  0 Dec 31 10:31 input3
-rw-r--r--  1 jessebutryn  staff  0 Dec 31 10:31 input4
$ for n in {1..4}; do echo "string$n">"input$n"; done
$ cat ./input{1..4}
string1
string2
string3
string4
$ echo {1..4}
1 2 3 4
$ echo {01..10}
01 02 03 04 05 06 07 08 09 10
$ echo {0..010}
000 001 002 003 004 005 006 007 008 009 010
$ echo {a..D}
a ` _ ^ ]  [ Z Y X W V U T S R Q P O N M L K J I H G F E D
$ echo {a..z}{0..9}
a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 e0 e1 e2 e3 e4 e5 e6 e7 e8 e9 f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 g0 g1 g2 g3 g4 g5 g6 g7 g8 g9 h0 h1 h2 h3 h4 h5 h6 h7 h8 h9 i0 i1 i2 i3 i4 i5 i6 i7 i8 i9 j0 j1 j2 j3 j4 j5 j6 j7 j8 j9 k0 k1 k2 k3 k4 k5 k6 k7 k8 k9 l0 l1 l2 l3 l4 l5 l6 l7 l8 l9 m0 m1 m2 m3 m4 m5 m6 m7 m8 m9 n0 n1 n2 n3 n4 n5 n6 n7 n8 n9 o0 o1 o2 o3 o4 o5 o6 o7 o8 o9 p0 p1 p2 p3 p4 p5 p6 p7 p8 p9 q0 q1 q2 q3 q4 q5 q6 q7 q8 q9 r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 s0 s1 s2 s3 s4 s5 s6 s7 s8 s9 t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 u0 u1 u2 u3 u4 u5 u6 u7 u8 u9 v0 v1 v2 v3 v4 v5 v6 v7 v8 v9 w0 w1 w2 w3 w4 w5 w6 w7 w8 w9 x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 y0 y1 y2 y3 y4 y5 y6 y7 y8 y9 z0 z1 z2 z3 z4 z5 z6 z7 z8 z9

답변3

이 경우 보다 적합한 방법이 제안되었습니다. 완전성을 위해(동일한 값이 여러 번 필요한 경우 필요할 수 있음):

declare -a args
for value in 1 2 3 4; do
    arg[$((index++))]="/dev/input/event${value}"
done

cat "${arg[@]}"

답변4

쉘이 중괄호 확장을 지원하지 않으면 printf다음을 사용할 수 있습니다 xargs.

printf '/dev/input/event%s\n' 1 5 7 | xargs cat

일련의 숫자를 원할 경우 seq대신 문자열 수정을 사용할 수 있습니다 printf.

seq 10 20 | sed 's|^|/dev/input/event|' | xargs cat

관련 정보