我想将文件中的几个变量的内容作为一列。例如,如果我设置我的变量:
FILE1=1.txt
FILE2=2.txt
FILE3=3.txt
要grep所有以FILE开头并后跟一个数字的变量:
set | grep FILE[0-9] > LIST
然而,内容只是变量名而不是内容,即:
head LIST
FILE1
FILE2
FILE3
我想:
1.txt
2.txt
3.txt
在相关问题上:我使用set
来打印变量。是否有一个命令只打印当前会话中设置的变量?
答案 0 :(得分:1)
您可以使用cut
。
grep "FILE*" file | cut -d"=" -f2
1.txt
2.txt
3.txt
使用的选项是
-d, --delimiter=DELIM
use DELIM instead of TAB for field delimiter
-f, --fields=LIST
select only these fields; also print any line that contains no delimiter character, unless the -s option is specified
使用awk
,将IFS设置为"="
并从匹配的文件中打印第二列。
awk -F"=" '/FILE*/{print $2}' file
1.txt
2.txt
3.txt
要在文件中打印所有name=value
对,请使用以下脚本。假设您的文件只有这些名称 - 值对
#!/bin/bash
setVariables=()
while IFS="=" read -r varName varValue;
do
setVariables+=("$varValue")
done <file
并将setVariables
中设置的值打印为
for value in "${setVariables[@]}"
do
echo "$value"
done
答案 1 :(得分:0)
要获取变量FILE1的内容,您只需评估字符串“$ FILE1”。
list=$(compgen -A variable | grep '^FILE[0-9]$')
for line in $list
do
eval echo '$'$line >> LIST
done
不要忘记正则表达式周围的'^ $'。否则即使是“HISTFILE1”也会匹配。