행에서 변수 가져오기

행에서 변수 가져오기

안녕하세요, 이 줄이 있어요

$ echo $(xinput | grep "TouchPad") SynPS/2 Synaptics TouchPad id=12 [slave pointer (2)]

어떻게든 12를 얻어 변수에 저장할 수 있는지 묻고 싶습니다. 감사해요.

답변1

device_id=$(xinput | sed -n 's/.*TouchPad.*id=\([0-9]*\).*/\1/p')

바라보다또 다른 대답이 일반적인 관용구에 대한 설명입니다 sed.

답변2

장치의 숫자 식별자를 가져올 필요가 없으며 문자열을 직접 사용할 수 있습니다. xinput list --name-only | grep Touchpad"터치패드"를 포함하는 장치 이름을 한 줄에 하나씩 나열하는 데 사용됩니다 .

숫자 식별자가 꼭 필요한 경우 xinput list이번에는 로 다시 전화하세요 --id-only.

name=$(xinput list --name-only | grep Touchpad)
nl='
'
case "$name" in
  *"$nl"*) echo "Multiple touchpad devices found, aborting"; exit 2;;
  "") echo "No touchpad device found, aborting"; exit 2;;
esac
id=$(xinput list --id-only "$name")

답변3

컴퓨터에서 이 스크립트/변수를 사용하려는 경우 장치 이름은 항상 동일합니다. 그래서 당신은 할 수 있습니다

$ xinput list --id-only "SynPS/2 Synaptics TouchPad"
#Output:
12

변수에 저장하려면 다음을 수행하십시오.

$ var=$(xinput list --id-only "SynPS/2 Synaptics TouchPad")

답변4

가장 효율적인 방법은 아니지만 간단한 방법은 다음과 같습니다.

deviceid="$(xinput | grep "TouchPad" | grep -oE 'id=[^ ]+' | cut -d= -f2)"

"$deviceid"그런 다음 스크립트에서 이를 참조할 수 있습니다.

어떻게 작동하는지 확인하기 위해 먼저 시작한 명령을 사용하여 구문 분석할 입력 줄을 가져옵니다. 그런 다음 grep -o전체 행 대신 일치하는 데이터만 반환하는 를 사용하므로 -E구문이 더 깔끔해집니다. 표현은 /id=[^ ]+/"a i, a d, =기호 및 하나 이상의 문자를 의미합니다.아니요공간. 이렇게 추출한 id=12다음 으로 보내면 cut입력을 기호로 분할하라고 지시합니다((for) .=-d12구분자) 스위치)를 선택하고 원하는 두 번째 필드를 가져옵니다 .

이는 모두 서브셸에서 실행되며 해당 출력은 변수 값으로 사용됩니다.

관련 정보