我不断获得bad substitution
pages1=${`pdftk "$1" dump_data | grep NumberOfPages`#*:}
是否可以保留这一陈述而不必执行以下操作?
pages1=`pdftk "$1" dump_data | grep NumberOfPages`
pages1=${pages1#*:}
答案 0 :(得分:1)
您可以使用内置read
的进程替换而不是赋值语句。
IFS=: read pages1 _ < <(pdftk "$1" dump_data | grep NumberOfPages)
第一个:
的所有内容都将分配给pages1
;第一次冒号后的所有内容都将分配给_
,您可以忽略其值。 (名称_
没有什么特别之处;您可以使用任何您喜欢的名称,例如rest
,tail
等。
如果您使用的是bash
4.2或更高版本,则可以打开lastpipe
选项,只需将grep
的输出传输到内置读取内容。
shopt -s lastpipe
pdftk "$1" dump_data | grep NumberOfPages | IFS=: read pages1 _
与bash
无关,但zsh
支持此类参数扩展链接。
% pages1=${$(echo a:b:c)#*:}
% echo $pages1
b:c
答案 1 :(得分:0)
不可能按照您的方式进行,但您可以使用此grep
替换awk
以使用单个命令获取输出:
pages1=$(pdftk "$1" dump_data | awk '/NumberOfPages/{sub(/^[^:]*:/, ""); print}')
答案 2 :(得分:0)
您可以使用sed:
而不是使用greppages1=$(pdftk "$1" dump_data | sed -ne '/NumberOfPages/{ s/^.\?[^:]*://; p; }')
注意:s/^.\?[^:]*://
模仿${1#*:}
以上s/^.*://
。