
私のシンプルな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 "\"");