我正在尝试计算/foo/
中具有不同扩展名的文件的数量。
情况1 可以正常工作,但是更灵活的情况(例如情况2 或情况3 )不能正常工作。
文件test.sh
# case 1
vista=$(find /foo/*.zip -atime -1)
echo "$vista" | wc -l
# case 2
vista=$(find /foo/*)
echo "$vista.zip -atime -1" | wc -l
# case 3
echo "$vista.xz -atime -1" | wc -l
输出:
./test.sh
187
4566
4566
我怀疑问题是,例如案例2 中的echo "$vista.zip -atime -1"
先运行find /foo/*
,然后再附加字符串zip -atime -1
,但我不知道如何正确地做。
答案 0 :(得分:1)
永远不要将代码存储在字符串中(除非使用printf %q
生成eval
安全版本的变量,然后在运行时使用eval
)。使用数组(用于动态构造的内容)或函数。
前者:
find_cmd=( find /foo/* )
"${find_cmd[@]}" -atime -1 | wc -l
后者:
find_under_foo() { find /foo/* "$@"; }
find_under_foo -atime -1 | wc -l