我正在尝试使用简单的shell脚本传递一个带有目录列表的数组。但是当我将$1
传递给程序时,第一个参数/bin/bash
转向*
(/ bin中的第一个目录)。我的代码在下面供参考。我不能在参数中传递#!/bin/bash
declare -a d
placeholder=0
for filename in ${1}; do
d[${placeholder}]=${filename:5}
((placeholder++))
done
echo "$1"
吗?
/bin/bash
回声的结果是ItemStack yourInkSack = new ItemStack(Material.INK_SACK, 1, (short) 4);
谢谢!
答案 0 :(得分:1)
一个glob被shell替换为一个匹配的名字列表。
利用这一点,并阅读参数列表中传递的名称列表:
#!/bin/bash
declare -a d
placeholder=0
for filename in "$@"; do # or just ''for filename; do''
d[${placeholder}]=${filename:5}
((placeholder++))
done
# print your array
declare -p d
# or, to print your array's contents one entry per line:
printf '%s\n' "${d[@]}"
...或者,更容易:
#!/bin/bash
d=( "${@##*/}" ) # assuming the :5 is intended to leave only filenames
declare -p d
答案 1 :(得分:0)
*
。尝试拨打yourscript '/bin/*'
(请注意引号)。