是否可以将带有数组/列表的bash脚本称为参数之一?我尝试了下面的示例,但它在"("。
bash file_manipulation.sh source_dir target_dir (filename1 filename2)
这样做:保存前2个参数并将其移出位置参数,然后将剩余的位置参数存储在数组
中#!/bin/bash
src=$1
tgt=$2
shift 2
files=( "$@" )
echo "manipulation"
echo " src=$src"
echo " tgt=$tgt"
for ((i=0; i < ${#files[@]}; i++)); do
echo " file $i: ${files[i]}"
done
so
$ bash file_manipulation.sh source_dir target_dir filename1 filename2
manipulation
src=source_dir
tgt=target_dir
file 0: filename1
file 1: filename2
您也可以像数组一样使用位置参数:
for file do
echo file: $file
done
no,您只能将字符串传递到shell脚本(或其他任何其他程序)。
您可以做的是处理一些特殊的语法,以适用于您定义自己并在Shell脚本中手动解析的阵列。例如,您可以将括号用作数组的定界符。然后,您必须逃脱它们,以使它们不会被外壳解释:
bash file_manipulation.sh source_dir target_dir ( filename1 filename2 )
cat file_manipulation.sh
#!/bin/bash
echo -e "source:n $1";
echo -e "target:n $2";
echo "files:";
#Convert a String with spaces to array, before delete parenthesis
my_array=(`echo $3 | sed 's/[()]//g'`)
for val in ${my_array[@]}; do
echo " $val";
done
#I add quotes to argument
bash file_manipulation.sh source_dir target_dir "(filename1 filename2)"
您得到:
来源: source_dir目标: target_dir文件: filename1 filename2
注意:没有括号的情况更好
cat file_manipulation.sh
#!/bin/bash
my_array=( $3 )
for val in ${my_array[@]}; do
echo "$val";
done
#I add quotes to argument, and without parenthesis
bash file_manipulation.sh source_dir target_dir "filename1 filename2"
注2:文件名不能包含空格。