我有一个名为test.sh
的bash脚本,其中变量range
在循环中具有类似1000 1999
的值。如果我在循环中echo "$range"
并将输出通过管道传递到cut
,它的行为将达到我的预期:
$ sh test.sh | cut -d ' ' -f 1
1000
2000
3000
4000
但是,如果我尝试在脚本中执行相同的操作,cut
不会被剪切:
min=$(echo "$range" | cut -d ' ' -f 1);
echo "$min";
$ sh test.sh
1000 1999
2000 2999
3000 3999
4000 4999
为什么min
包含1000 1999
而不是1000
?万一重要,在Windows 10上的git bash中。
为回应评论,这是declare -p range
的输出:
$ bash test.sh
declare -- range="1000
1999"
declare -- range="2000
2999"
declare -- range="3000
3999"
declare -- range="4000
4999"
我不确定这是什么意思。我确信这些空格确实是空格,因为当我将echo "$range"
的输出重定向到文件并在十六进制编辑器中对其进行检查时,这就是我看到的。但是现在我对此表示怀疑。因此,由于现在似乎很相关,因此range
的分配方式如下,其中dir
包含类似X1000-X1999
的内容:
range=$(echo "$dir" | grep -o -E '[0-9]+')
;