Shell 将文件名重定向到变量中

Shell 将文件名重定向到变量中,shell,awk,Shell,Awk,假设有以下几个文件 CLIENT_1.csv CLIENT_2.csv CLIENT_3.csv CLIENT_4.csv if [ ${ID} != 4 ] then blah blah blah fi 是否有任何shell命令/awk可用于将1,2,3,4定向到名为“ID”的变量中?这样我们就可以做到以下几点 CLIENT_1.csv CLIENT_2.csv CLIENT_3.csv CLIENT_4.csv if [ ${ID} != 4 ] then blah blah blah

假设有以下几个文件

CLIENT_1.csv
CLIENT_2.csv
CLIENT_3.csv
CLIENT_4.csv
if [ ${ID} != 4 ]
then
blah blah blah
fi
是否有任何shell命令/awk可用于将1,2,3,4定向到名为“ID”的变量中?这样我们就可以做到以下几点

CLIENT_1.csv
CLIENT_2.csv
CLIENT_3.csv
CLIENT_4.csv
if [ ${ID} != 4 ]
then
blah blah blah
fi

这几乎是这个问题的重复。

它使用文件名通配符遍历列表。在您的情况下,您将使用:

for filename in /mydirectory/CLIENT_*.csv; do
   #whatever you wanted to do
done
在文件名字符串模式是变量的情况下,还有另一种方法。 在for循环初始化中展开通配符后,文件名存储在变量file(查看接受的答案)中。再次使用通配符的强大功能,您的示例将如下所示:

putfile=CLIENT_*.csv
for file in $putfile; do #whatever you wanted to do
done

这几乎是这个问题的重复。

它使用文件名通配符遍历列表。在您的情况下,您将使用:

for filename in /mydirectory/CLIENT_*.csv; do
   #whatever you wanted to do
done
在文件名字符串模式是变量的情况下,还有另一种方法。 在for循环初始化中展开通配符后,文件名存储在变量file(查看接受的答案)中。再次使用通配符的强大功能,您的示例将如下所示:

putfile=CLIENT_*.csv
for file in $putfile; do #whatever you wanted to do
done

要获取每个文件的数字部分,请执行以下操作:

for file in CLIENT_*.csv ; do
    id=${file%.csv}         # remove trailing '.csv'
    id=${id#CLIENT_}        # remove leading 'CLIENT_'
    if [ "$id" != 4 ] ; then ... ; fi
done

要获取每个文件的数字部分,请执行以下操作:

for file in CLIENT_*.csv ; do
    id=${file%.csv}         # remove trailing '.csv'
    id=${id#CLIENT_}        # remove leading 'CLIENT_'
    if [ "$id" != 4 ] ; then ... ; fi
done

那么,您想遍历文件列表,而这些文件都位于同一目录中?这是一个带bash的Unix操作系统吗?是的,我想遍历这些文件的列表,所有文件都在同一个目录中,这是带bash的Unix操作系统。谢谢那么,您想遍历文件列表,而这些文件都位于同一目录中?这是一个带bash的Unix操作系统吗?是的,我想遍历这些文件的列表,所有文件都在同一个目录中,这是带bash的Unix操作系统。谢谢否,文件名不会存储在var中,字符串
CLIENT.*.csv
将存储在var中。如果不使用双引号,它将扩展到第二行上的匹配文件名。否,文件名将不会存储在var中,字符串
CLIENT.*.csv
将存储在var中。当它在没有双引号的情况下使用时,它会扩展到第二行匹配的文件名。