当我将IFS
变量设置为一个空格时,bash
将多个空格视为一个空格(myprogram
是一个打印它接收到的命令行参数的程序):
IFS=" "
x="hello hi world"
./myprogram $x
argv[1] = hello
argv[2] = hi
argv[3] = world
Run Code Online (Sandbox Code Playgroud)
但是当我将IFS
变量设置为逗号时,bash
不会将多个逗号视为一个逗号:
IFS=","
x="hello,,,hi,,,world"
./myprogram $x
argv[1] = hello
argv[2] =
argv[3] =
argv[4] = hi
argv[5] =
argv[6] =
argv[7] = world
Run Code Online (Sandbox Code Playgroud)
这是为什么?
我读过这$@
是一个保存位置参数的数组。
我试图输出$@
数组的一个元素:
echo ${@[1]}
Run Code Online (Sandbox Code Playgroud)
但是bash
给了我这个错误:
test.sh: line 1: ${@[1]}: bad substitution
Run Code Online (Sandbox Code Playgroud) 如果我做这样的事情:
IFS=,
x=hello,hi,world
echo $x
Run Code Online (Sandbox Code Playgroud)
然后将提取三个参数(即hello
andhi
和world
),并将这三个参数传递给echo
。
但是当我不使用变量时:
IFS=,
echo hello,hi,world bye
Run Code Online (Sandbox Code Playgroud)
然后将使用空格分隔符而不是逗号分隔符进行分词,因此生成并传递给的两个参数echo
将是hello,hi,world
and bye
。
有没有办法在不使用变量时使用非空格分隔符进行分词?