awk スクリプト内のシステム コールで括弧とスペースを含むパスを渡す

awk スクリプト内のシステム コールで括弧とスペースを含むパスを渡す

私のシンプルなawkスクリプトの中で、システムコマンドを呼び出します

#!/bin/bash
 Test='/home/software/Other/new (Applet)'
 ls "${Test}"

 var=$(ls "${Test}")
 echo $var
 awk  -vTest="$var" 'BEGIN  {

              #some code that works

               print "This is a test", Test
               #command= "ls new (Applet)"
               system ("ls " Test);    }'

問題は()のエラーです

$./testthere.sh です。

/home/software/Other/new (アプレット) /home/software/Other/new (アプレット)

これはテストです /home/software/Other/new (アプレット)

sh: -c: 行 0: 予期しないトークン(' sh: -c: line 0:ls /home/software/Other/new (Applet) の近くに構文エラーがあります'

コマンドが文字列として渡されるように部分を修正したところ

                               command= "ls new (Applet)"

                               system (command);

同様のエラーが発生します:

$ ./testthere.sh です

/home/software/Other/new (アプレット)

/home/software/Other/new (アプレット)

これはテストです /home/software/Other/new (アプレット)

sh: -c: 行 0: 予期しないトークン(' sh: -c: line 0:ls new の近くに構文エラーがあります (アプレット)'

これを回避するにはどうすればいいでしょうか?

答え1

system()awk で呼び出しを実装しているシェルのスペースを含む単語を引用符 ("" または '') で囲む必要があります。例:

system ("ls '" Test "'"); 

または

system ("ls \"" Test "\"");

関連情報