Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 合并/合并两个多行输出为一个“;lineFromA:lineFromB";_Bash - Fatal编程技术网

Bash 合并/合并两个多行输出为一个“;lineFromA:lineFromB";

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

第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 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':'