0

私は R ユーザーであり、bash (FFmpeg) で実行されるプログラムで for ループを使用しようとしています。ベクトルを作成し、そのベクトルを for ループで使用するのは自然なことのように思えます。たとえば、これは私がRで行うことです:

f <- c("File name that is identifier 01.avi", "File name that is identifier 02.avi", "File name that is identifier 03.avi")

for i in 1:length(f) {for loop}

bashでベクトルに名前を割り当てるにはどうすればよいですか?

これが私が試したもので、次の問題に実行しました:

f=["File name that is identifier 01.avi" "File name that is identifier 02.avi" "File name that is identifier 03.avi"]
bash: File name that is identifier 02.avi: command not found

この場合、Bashは私のファイル名をコマンドとして識別し、それらを実行するようです

let f=["File name that is identifier 01.avi" "File name that is identifier 02.avi" "File name that is identifier 03.avi"]
bash: let: f=[File name that is identifier 01.avi: syntax error: operand expected (error token is "[File name that is identifier 01.avi")

ここで私は明らかに何か間違ったことをしています。

これを1つのファイルに対してのみ行うと、機能します。ブラケットの有無にかかわらず:

f=["File name that is identifier 01.avi"]
# echo $f
[File name that is identifier 01.avi]
4

2 に答える 2

1

では、次のように言って配列bashを作成できます。

f=("File name that is identifier 01.avi" "File name that is identifier 02.avi" "File name that is identifier 03.avi")

${f[0]}${f[1]}{f[2]}ファイル名を返します。

配列をループするには、次のように言えます。

for ((i = 0; i < ${#f[@]}; i++))
do
    echo "${f[$i]}"
done

これは次を返します:

File name that is identifier 01.avi
File name that is identifier 02.avi
File name that is identifier 03.avi

または、次のように言ってループすることもできます。

for i in "${f[@]}"; do echo "$i"; done
于 2013-08-07T08:41:26.697 に答える
1

唯一の本当に正気な方法は、位置引数を使用して bash スクリプトを呼び出すことです (R からプログラムを呼び出す方法がわからないため、これは疑似コードです)。

exec(["bash", "-c", "echo one: $1, two: $2", "--", "eins", "zwei")

ここで、--は bash オプションの終わりを示し、後続のすべてのパラメーター (この場合はeinszwei) をスクリプト自体の位置引数にします。

スクリプトに単語を埋め込むための簡単で、ポータブルで、安全な方法が 1 つあります。1 つの単語のすべての重要な (または単にすべての) 文字を空白でエスケープし\、単語を空白で区切ります。

system("myfunction my\ first\ arg\$\%\" my\ second\ arg\&\/\%")
于 2013-08-07T08:50:54.110 に答える