这样的“身份”函数应满足以下2个特性:
identity $(identity a\ b c\ d)
# (Expected output:)
# a b
# c d
假设有以下的'argv_count'函数:
argv_count () { echo "argv_count('$@'):$#"; }
argv_count $(identity a\ b c\ d)
# (Expected output:)
# argv_count('a b c d'):2
如果需要,测试中可以引入其他引用。
像下面这样的简单候选者未能通过第二个测试:
identity () { for arg in "$@"; do echo "$arg"; done; }
cat不是一个正确的解决方案,因为它是相对于stdin | stdout的身份函数。
eval
,否则您将丧失空格和分隔符之间的区别,因此无法稍后循环遍历该文件列表。 - Lucas Cimonfind -print0
一样),但是这不能与$()
结构一起使用——你必须将其管道传递到类似于xargs -0
或while IFS= read -rd '' argument
循环中。这个“安全”的原因与你不能使用它与$()
相同:C字符串不能包含nulls,因此参数和$()
都无法处理它们。 - Gordon Davisson