ido*_*obr 8 string bash awk split cut
我在数组中有以下数据:
MY_ARR[0]="./path/path2/name.exe 'word1 word2' 'name1,name2'"
MY_ARR[1]="./path/path2/name.exe 'word1 word2' 'name3,name4,name5'"
MY_ARR[2]=".name.exe 'word1 word2'"
MY_ARR[3]="name.exe"
MY_ARR[4]="./path/path2/name.exe 'word1 word2' 'name1'"
MY_ARR[5]="./path/path2/name.exe 'word1 word2' 'name.exe, name4.exe, name5.exe'"
Run Code Online (Sandbox Code Playgroud)
我想把它分成两个变量:$file
和$parameter
.
例:
file="./path/path2/name.exe"
parameter="'word1 word2' 'name1,name2'"
Run Code Online (Sandbox Code Playgroud)
我可以用awk做到这一点:
parameter=$(echo "${MY_ARR[1]}" | awk -F\' '{print $2 $4}')
file=$(echo "${MY_ARR[1]}" | awk -F\' '{print $1}')
Run Code Online (Sandbox Code Playgroud)
这需要删除尾随空格并且看起来很复杂.
有没有更好的方法呢?
fed*_*qui 15
看起来字段之间的分隔符是一个空格.因此,您可以用它cut
来分割它们:
file=$(echo "${MY_ARR[1]}" | cut -d' ' -f1)
parameter=$(echo "${MY_ARR[1]}" | cut -d' ' -f2-)
Run Code Online (Sandbox Code Playgroud)
-f1
表示第一个参数.-f2-
表示第二个参数的所有内容.你可以使用read
:
$ read file parameter <<< ${MY_ARR[1]}
$ echo "$file"
./path/path2/name.exe
$ echo "$parameter"
'word1 word2' 'name3,name4,name5'
Run Code Online (Sandbox Code Playgroud)