文字列で定義された2つのコマンドを組み合わせて1つのコマンドとして実行できますか?例えば
var="ls -alt"
var2="| grep usersfile"
var3="| grep usersfolder"
次の接続コマンドの例は機能しません。
ㅏ。'{$var & $var2;}'
雨。'{$var & $var3;}'
私は何ですか:
ㅏ。走って"$var $var2"
取得してください"ls -alt | grep usersfile"
または
b。走って"$var $var3"
手に入れてください。"ls -alt | grep usersfolder"
答え1
はい、を使用してこれを実行できますeval
。
$ var="ls -alt"
$ var2="| grep usersfile"
$ var3="| grep usersfolder"
$ eval "$var$var2"
< Output of ls -alt | grep userfile >
$ eval "$var$var3"
< Output of ls -alt | grep usersfolder >
答え2
おそらくこうしてはいけないと思います。実際に達成したい作業に応じて他のオプションがあります。
検索文字列を選択する動的オプションが必要な場合は、次のことができます。
#!/bin/bash
pattern=$1
ls -alt | grep "${pattern:-.}"
最初の位置引数が何であるか、引数が指定されていない場合に検索します。
または、特定の条件下で措置を講じたい場合:
#!/bin/bash
cmd=(ls -alt)
p1=usersfile
p2=usersfolder
if [[ condition1 ]]; then
p=$p1
elif [[ condition2 ]]; then
p=$p2
fi
"${cmd[@]}" | grep "$p"
または関数から:
#!/bin/bash
ls_func () {
local p=$1
ls -alt | grep "${p:-.}"
}
while getopts p:c: opt; do
case $opt in
c) command=$OPTARG;;
p) pattern=$OPTARG;;
esac
done
if [[ $command == 'ls' ]]; then
ls_func "$pattern"
fi