Shell 从目录KSH Unix获取文件名
好的,大约一周前我问了一个问题,得到的回答是有效的,但不能解决我的问题。我是KSH的新手。另外,一个好的解释也会有帮助,我宁愿有一个起点或某个地方开始阅读,而不是已经编写了代码。:)我希望成品看起来像这样:Shell 从目录KSH Unix获取文件名,shell,unix,ksh,Shell,Unix,Ksh,好的,大约一周前我问了一个问题,得到的回答是有效的,但不能解决我的问题。我是KSH的新手。另外,一个好的解释也会有帮助,我宁愿有一个起点或某个地方开始阅读,而不是已经编写了代码。:)我希望成品看起来像这样: iter = 1 do while fileExistsInDir==true $arr[$iter] = filename iter++ done #do something with the array 在我之前的问题中,我被告知要这样做 set --*
iter = 1
do
while fileExistsInDir==true
$arr[$iter] = filename
iter++
done
#do something with the array
在我之前的问题中,我被告知要这样做
set --*
[#$var -gt 0]&&{
echo $1
}
这是可行的,但我必须保持1美元的增量,即2美元、3美元、4美元等等。我希望它保持静态并更改每个文件的值。有没有更简单的方法。到目前为止,我在堆栈上看到的所有内容要么需要依赖项,要么似乎不起作用 行set--*
将当前目录中的所有文件全局放到位置参数中
可以使用循环遍历所有位置参数
for file in "$@"; do
echo "$file"
done
行set--*
将当前目录中的所有文件全局放到位置参数中
可以使用循环遍历所有位置参数
for file in "$@"; do
echo "$file"
done
要将当前目录中的所有文件放入数组非常容易:
$ arr=(*)
$ echo "${arr[@]}"
*
被称为glob构造,但大多数人称之为通配符。它表示“当前目录中零个或多个字符的文件名”(即所有字符)。我假设ksh是一个相对较新的版本。Korn shell中的数组处理多年来发生了变化。要将当前目录中的所有文件都放到一个数组中非常简单:
$ arr=(*)
$ echo "${arr[@]}"
*
被称为glob构造,但大多数人称之为通配符。它表示“当前目录中零个或多个字符的文件名”(即所有字符)。我假设ksh是一个相对较新的版本。Korn shell中的数组处理多年来发生了变化。所以您只需要一个数字索引数组来保存当前目录中的文件名?使用空格,记住它们通常是重要的。所以你只需要一个数字索引数组来保存当前目录中的文件名?使用空格时,请记住它们通常是重要的。“$@”中的部分是可选的,默认值是@cdarke同意的。通常情况下,我会不使用它,但在这种情况下,我认为增加的特异性对于通过set--
设置位置参数的特定设置是有用的。(虽然如果我说,$@
是位置参数的数组,它会更有用。)谢谢,这解释得更好。这是执行此过程的最佳方法吗?“$@”
中的部分是可选的,默认部分是默认的。@cdarke同意。通常情况下,我会不使用它,但在这种情况下,我认为增加的特异性对于通过set--
设置位置参数的特定设置是有用的。(虽然如果我说,$@
是位置参数的数组,它会更有用。)谢谢,这解释得更好。这是完成这个过程的最好方法吗?这比我现在使用的集合更好吗?它更简单,简单是好的。有些人在使用set
时有问题-我没有。set
有一些模糊的问题,但是在方法之间没有太多选择。当您使用不带数组的shell时,则需要使用set
。使用set
的问题在于,它会将脚本/函数收到的任何位置参数吹走,因此如果您仍然需要这些参数,则会出现问题。如果您有数组,则可以选择使用set
,但使用数组也可以(而且您可以使用更多的数组)。良好的做法是将位置参数指定给脚本开头附近的命名参数(变量),因此使用set
覆盖这些参数不应该是问题。这是专门的Korn shell,但是ksh88需要不同的语法。感谢您提供的信息,它帮助我更好地理解这一点。这比我现在使用集合所做的更好吗?它更简单,也更简单。有些人在使用set
时有问题-我没有。set
有一些模糊的问题,但是在方法之间没有太多选择。当您使用不带数组的shell时,则需要使用set
。使用set
的问题在于,它会将脚本/函数收到的任何位置参数吹走,因此如果您仍然需要这些参数,则会出现问题。如果您有数组,则可以选择使用set
,但使用数组也可以(而且您可以使用更多的数组)。良好的做法是将位置参数指定给脚本开头附近的命名参数(变量),因此使用set
覆盖这些参数不应该是问题。这是专门的Korn shell,但是ksh88需要不同的语法。感谢您提供的信息,它帮助我更好地理解这一点