Bash 合并/合并两个多行输出为一个“;lineFromA:lineFromB";
第1个输入,共2个:Bash 合并/合并两个多行输出为一个“;lineFromA:lineFromB";,bash,Bash,第1个输入,共2个: $ xinput list --id-only 2 4 12 3 $ xinput list --name-only Virtual core pointer Virtual core XTEST pointer SynPS/2 Synaptics TouchPad Virtual core keyboard 2 : Virtual core pointer 4 : Virtual core XTEST pointer 12 : SynPS/2 Synaptics To
$ xinput list --id-only
2
4
12
3
$ xinput list --name-only
Virtual core pointer
Virtual core XTEST pointer
SynPS/2 Synaptics TouchPad
Virtual core keyboard
2 : Virtual core pointer
4 : Virtual core XTEST pointer
12 : SynPS/2 Synaptics TouchPad
3 : Virtual core keyboard
SAVEIFS=$IFS
IFS=$'\n'
ids=($(xinput list --id-only))
names=($(xinput list --name-only))
combined=
for (( i=0; i<${#ids[@]}; i++ )); do
temp=$(printf "%s %s $s\n" "${ids[i]}" $(echo "${names[i]}" | tr -d "\n" ) "${ids[i]}")
combined="${combined} ${temp}"
done
echo "${combined}"
IFS=$SAVEIFS
$ ./touchpad
2 Virtual core pointer
2 4 Virtual core XTEST pointer
4 12 SynPS/2 Synaptics TouchPad
12 3 Virtual core keyboard
3 5 Virtual core XTEST keyboard
5
输入2/2:
$ xinput list --id-only
2
4
12
3
$ xinput list --name-only
Virtual core pointer
Virtual core XTEST pointer
SynPS/2 Synaptics TouchPad
Virtual core keyboard
2 : Virtual core pointer
4 : Virtual core XTEST pointer
12 : SynPS/2 Synaptics TouchPad
3 : Virtual core keyboard
SAVEIFS=$IFS
IFS=$'\n'
ids=($(xinput list --id-only))
names=($(xinput list --name-only))
combined=
for (( i=0; i<${#ids[@]}; i++ )); do
temp=$(printf "%s %s $s\n" "${ids[i]}" $(echo "${names[i]}" | tr -d "\n" ) "${ids[i]}")
combined="${combined} ${temp}"
done
echo "${combined}"
IFS=$SAVEIFS
$ ./touchpad
2 Virtual core pointer
2 4 Virtual core XTEST pointer
4 12 SynPS/2 Synaptics TouchPad
12 3 Virtual core keyboard
3 5 Virtual core XTEST keyboard
5
预期输出:
$ xinput list --id-only
2
4
12
3
$ xinput list --name-only
Virtual core pointer
Virtual core XTEST pointer
SynPS/2 Synaptics TouchPad
Virtual core keyboard
2 : Virtual core pointer
4 : Virtual core XTEST pointer
12 : SynPS/2 Synaptics TouchPad
3 : Virtual core keyboard
SAVEIFS=$IFS
IFS=$'\n'
ids=($(xinput list --id-only))
names=($(xinput list --name-only))
combined=
for (( i=0; i<${#ids[@]}; i++ )); do
temp=$(printf "%s %s $s\n" "${ids[i]}" $(echo "${names[i]}" | tr -d "\n" ) "${ids[i]}")
combined="${combined} ${temp}"
done
echo "${combined}"
IFS=$SAVEIFS
$ ./touchpad
2 Virtual core pointer
2 4 Virtual core XTEST pointer
4 12 SynPS/2 Synaptics TouchPad
12 3 Virtual core keyboard
3 5 Virtual core XTEST keyboard
5
我不能让它工作。不管怎样,名称中的空格始终是一个问题
这是我得到的最接近的结果:
$ xinput list --id-only
2
4
12
3
$ xinput list --name-only
Virtual core pointer
Virtual core XTEST pointer
SynPS/2 Synaptics TouchPad
Virtual core keyboard
2 : Virtual core pointer
4 : Virtual core XTEST pointer
12 : SynPS/2 Synaptics TouchPad
3 : Virtual core keyboard
SAVEIFS=$IFS
IFS=$'\n'
ids=($(xinput list --id-only))
names=($(xinput list --name-only))
combined=
for (( i=0; i<${#ids[@]}; i++ )); do
temp=$(printf "%s %s $s\n" "${ids[i]}" $(echo "${names[i]}" | tr -d "\n" ) "${ids[i]}")
combined="${combined} ${temp}"
done
echo "${combined}"
IFS=$SAVEIFS
$ ./touchpad
2 Virtual core pointer
2 4 Virtual core XTEST pointer
4 12 SynPS/2 Synaptics TouchPad
12 3 Virtual core keyboard
3 5 Virtual core XTEST keyboard
5
使用数组保存值
#!/bin/bash
ids=()
names=()
while read id ; do
ids+=("$id")
done < <(xinput list --id-only)
while read name ; do
names+=("$name")
done < <(xinput list --name-only)
for ((i=0; i<${#ids[@]}; ++i)) ; do
printf '%s: %s\n' "${ids[i]}" "${names[i]}"
done
或使用此选项填充关联数组:
#!/bin/bash
declare -A device
while read id name; do
device[$id]=$name
done < <(paste <(xinput list --id-only) \
<(xinput list --name-only))
for id in "${!device[@]}" ; do
printf '%s: %s\n' "$id" "${device[$id]}"
done
#/bin/bash
声明-设备
读取id名称时;做
设备[$id]=$name
完成<使用数组保存值
#!/bin/bash
ids=()
names=()
while read id ; do
ids+=("$id")
done < <(xinput list --id-only)
while read name ; do
names+=("$name")
done < <(xinput list --name-only)
for ((i=0; i<${#ids[@]}; ++i)) ; do
printf '%s: %s\n' "${ids[i]}" "${names[i]}"
done
或使用此选项填充关联数组:
#!/bin/bash
declare -A device
while read id name; do
device[$id]=$name
done < <(paste <(xinput list --id-only) \
<(xinput list --name-only))
for id in "${!device[@]}" ; do
printf '%s: %s\n' "$id" "${device[$id]}"
done
#/bin/bash
声明-设备
读取id名称时;做
设备[$id]=$name
完成<您也可以像这样使用粘贴
:
paste -d' : ' <(xinput list --id-only) /dev/null{,} <(xinput list --name-only)
paste-d':'您也可以像这样使用paste
:
paste -d' : ' <(xinput list --id-only) /dev/null{,} <(xinput list --name-only)
paste-d':'