0

コマンドを実行するときに変数に定義されたいくつかの引数を使いたいと思います。空白を持つ変数から引数を渡す

私はある目的地から別の目的地にファイルをコピーしたいと思いますし、変数を使ってcpの引数を指定します。私はスペースで引数を使用する場合しかし、私はそれを動作させることはできません

execve("/bin/cp", ["cp", "file1", "file2"] 

#!/bin/sh 
ARGS="file1 file2" 

cp $ARGS 

straceのは、以下の期待の解釈を示しています。引数に空白が含まれていないときには正常に動作します。私は、エスケープ引用符や他の多くのもので、各引数を入れて試してみたが、それは個々の引数として解釈されます。

#!/bin/sh 
ARGS="\"file1\" \"file2\"" 

cp $ARGS 

結果は二つの引数が、4ではない。物事を複雑にする

execve("/bin/cp", ["cp", "\"file", "1\"", "\"file", "2\""] 

さらに私の最終的な目標は、指定されたARGS変数内で変数の置換を使用することですが、どのように動作させるのですか?次のことを考えてみましょう:

FILENAME1="Picture 1.jpg" 
FILENAME2="Picture 2.jpg" 

ARGS="$FILENAME1 $FILENAME1" 

cp $ARGS 

それは四つの引数になり:

execve("/bin/cp", ["cp", "Picture", "1.jpg", "Picture", "1.jpg"] 

答えて

0

あなたが確実な値のリストを格納するための単一のパラメータを使用することはできません。 の部分がの値である空白と、の値がの値を区切る空白を区別する方法はありません。代わりに配列を使用してください。

#!/bin/bash 

filename1="Picture 1.jpg" 
filename2="Picture 2.jpg" 

args=("$filename1" "$filename2") 

cp "${args[@]}" 
+0

ありがとうございました。これはもう一つの難しさを明らかにします。私はこれを複数のスクリプトに渡す必要があります。私の引数リストを含む単一のパラメータは1つのスクリプトに組み込まれ、これらの引数をとるコマンドを実行するスクリプトに渡されます。 単一のパラメータの代わりに配列を渡すにはどうすればよいですか? –

+0

できません。 '' $ {args [@]} ''は個々の単語のシーケンスに単純に展開され、それぞれ個別の引数を構成します。 2つのスクリプト間のインターフェースを再設計する必要があるかもしれません。 – chepner

+0

説明をありがとう。私はこの問題に関する別の質問を作成します:) –

関連する問題