Nik*_*vak 197 arrays string bash shell
我有一个包含空格分隔字符串的变量:
line="1 1.50 string"
Run Code Online (Sandbox Code Playgroud)
我想将带有空格的字符串拆分为分隔符并将结果存储在数组中,以便以下内容:
echo ${arr[0]}
echo ${arr[1]}
echo ${arr[2]}
Run Code Online (Sandbox Code Playgroud)
输出
1
1.50
string
Run Code Online (Sandbox Code Playgroud)
在某个地方我找到了一个不起作用的解决方案:
arr=$(echo ${line})
Run Code Online (Sandbox Code Playgroud)
如果我在此之后运行上面的echo语句,我得到:
1 1.50 string
[empty line]
[empty line]
Run Code Online (Sandbox Code Playgroud)
我也试过了
IFS=" "
arr=$(echo ${line})
Run Code Online (Sandbox Code Playgroud)
结果相同.有人可以帮帮忙吗?
kev*_*kev 312
要将字符串转换为数组,请使用
arr=($line)
Run Code Online (Sandbox Code Playgroud)
要么
read -a arr <<< $line
Run Code Online (Sandbox Code Playgroud)
至关重要的是不要使用引号,因为这样可以解决问题.
小智 37
试试这个:
arr=(`echo ${line}`);
Run Code Online (Sandbox Code Playgroud)
sor*_*tar 28
在:arr=( $line )
."分裂"与"glob"相关联.
通配符(*
,?
和[]
)将扩展为匹配的文件名.
正确的解决方案只是稍微复杂一点:
IFS=' ' read -a arr <<< "$line"
Run Code Online (Sandbox Code Playgroud)
没有全球化的问题; 设置分割字符$IFS
,引用变量.
如果需要参数扩展,请尝试:
eval "arr=($line)"
Run Code Online (Sandbox Code Playgroud)
例如,采用以下代码。
line='a b "c d" "*" *'
eval "arr=($line)"
for s in "${arr[@]}"; do
echo "$s"
done
Run Code Online (Sandbox Code Playgroud)
如果当前目录包含的文件a.txt
,b.txt
并且c.txt
,然后执行该代码会产生以下输出。
a
b
c d
*
a.txt
b.txt
c.txt
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
208257 次 |
最近记录: |