ico*_*ast 8 bash zsh brace-expansion
我使用以下命令创建了要测试的 URL 列表:
echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
Run Code Online (Sandbox Code Playgroud)
不幸的是,附加到urls.txt每个URL之前都有一个空格(当然第一个除外)。我明白为什么会发生这种情况,并且我意识到我可以通过管道通过一个sed表达式将其剥离,但我想知道是否有办法抑制它。(这可能看起来很愚蠢和迂腐,但这与许多人认为不“虐待猫”的偏好没有什么不同。)
我尝试使用双引号来抑制分词,但这也抑制了大括号扩展,所以这是行不通的。
我尝试将 IFS 更改为空字符串,但它也不起作用:
IFS='' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
Run Code Online (Sandbox Code Playgroud)
也没有将其更改为换行符:
IFS='\n' echo -e localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}"\n" >> urls.txt
Run Code Online (Sandbox Code Playgroud)
cuo*_*glm 16
使用printf内置:
$ printf %s\\n localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}
localhost:8080/reports/promos/130
localhost:8080/reports/promos/130.pdf
localhost:8080/reports/promos/130.xls
localhost:8080/reports/promos/130.xlsx
localhost:8080/reports/promos/130.csv
localhost:8080/reports/promos/130.preload
localhost:8080/reports/promos/130-unburdened
localhost:8080/reports/promos/130-unburdened.pdf
localhost:8080/reports/promos/130-unburdened.xls
localhost:8080/reports/promos/130-unburdened.xlsx
localhost:8080/reports/promos/130-unburdened.csv
localhost:8080/reports/promos/130-unburdened.preload
....
Run Code Online (Sandbox Code Playgroud)
您可以将大括号扩展存储在一个数组中,然后以您选择的方式输出它:
urls=( localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload} )
Run Code Online (Sandbox Code Playgroud)
然后
printf "%s\n" "${urls[@]}"
Run Code Online (Sandbox Code Playgroud)
或者
(IFS=$'\n'; echo "${urls[*]}")
Run Code Online (Sandbox Code Playgroud)
echo 示例看起来很奇怪,因为:
IFS=$'\n' echo "${urls[*]}"因为变量在新的 env 变量生效之前被扩展另外,请注意所使用的解引用数组索引的细微差别:
[@] 在 printf 示例中将数组扩展为单个单词[*] 在 echo 示例中将数组扩展为单个单词,元素由 IFS 的第一个字符分隔这被标记为 zsh,所以我建议使用 zsh 内置print:
print -l localhost:8080/reports/{promos,promo-updates,scandown}/{130,139,142}{,-unburdened,-burdened}{,.pdf,.xls,.xlsx,.csv,.preload}
Run Code Online (Sandbox Code Playgroud)
-l 在单独的行上打印参数。
| 归档时间: |
|
| 查看次数: |
1739 次 |
| 最近记录: |